在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 ”的属性。 只需按照以下步骤 –

  1. 打开SSMS
  2. 连接到Publisher数据库
  3. 运行命令 – ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. 它会将列宽从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规则更改为表默认值。 将当前归类添加到脚本。