在SQL Server中更改由模式绑定视图引用的列的大小
我试图改变一个列在sql服务器的大小使用:
ALTER TABLE [dbo].[Address] ALTER COLUMN [Addr1] [nvarchar](80) NULL
Addr1
的长度原来是40
。
它失败了,提出这个错误:
The object 'Address_e' is dependent on column 'Addr1'. ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access this column.
我试着去读它,似乎是因为一些视图引用这个列,似乎SQL Server实际上是试图删除引发错误的列。
Address_e
是由以前的数据库pipe理员创build的视图。
有没有其他方法可以改变列的大小?
视图可能是使用WITH SCHEMABINDING选项创build的,这意味着它们被明确地连接起来以防止这种变化。 看起来像架构绑定工作,并阻止你打破这些意见,幸运的一天,嘿? 在声明对数据库的影响之后,请联系您的数据库pipe理员并要求他进行更改。
来自MSDN :
SCHEMABINDING
将视图绑定到一个或多个基础表的模式。 指定SCHEMABINDING时,不能以影响视图定义的方式修改一个或多个基表。 必须首先修改或删除视图定义本身以删除要修改的表的依赖关系。
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
如果有人想在SQL Server 2008中“增加复制表的列宽”,那么不需要改变“ replicate_ddl=1
”的属性。 只需按照以下步骤 –
- 打开SSMS
- 连接到Publisher数据库
- 运行命令 –
ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
- 它会将列宽从
varchar(x)
增加到varchar(22)
并且可以在订户(交易获得复制)上看到相同的更改。 所以不需要重新初始化复制
希望这将帮助所有正在寻找它的人。
看到这个链接
使用T-SQL命令调整或修改具有默认约束的MS SQL Server表列
这样的SQL Server问题的解决scheme将是
删除或禁用表列上的DEFAULT Constraint。
修改表列数据types和/或数据大小。
重新创build或启用SQL表列上的默认约束。
再见
这里是什么与我正在使用的程序的版本工作:也可以为你工作。
我将只放置它的指令和命令。 class是表的名字。 你用这个方法在表格中改变它自己。 而不仅仅是search过程的回报。
查看表类
select * from class
改变列FacID(看作“faci”)和classnumber(看作“classnu”)的长度来适应整个标签。
alter table class modify facid varchar (5); alter table class modify classnumber varchar(11);
再次查看表格以查看差异
select * from class;
(再次运行该命令以查看差异)
这改变了实际的表格,但为了更好。
PS我把这些指令作为命令的注释。 这不是一个testing,但可以帮助一个:)
检查列整理。 此脚本可能会将sorting规则更改为表默认值。 将当前归类添加到脚本。