更改SQL Server中由架构绑定视图引用的列的大小

Sta*_*len 124 sql sql-server

我正在尝试使用以下命令更改sql server中列的大小:

ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

我试图阅读它,似乎因为一些视图引用此列,似乎SQL Server实际上试图删除引发错误的列.

Address_e 是由以前的数据库管理员创建的视图.

有没有其他方法可以改变列的大小?

小智 256

ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)
Run Code Online (Sandbox Code Playgroud)

  • 提票的数量可能是因为这个问题目前是最重要的[谷歌搜索'tsql alter nvarchar length'](https://www.google.co.uk/?gws_rd=ssl#q=tsql+alter+ nvarchar + length)因此人们(比如我)只想提醒如何更改列的长度看到这个答案并向上投票说"谢谢"而不发现(因为我没有看到你的评论)这个问题比问题标题所暗示的更为微妙. (13认同)
  • 不,问题就像雷木思提到的那样.代码本身没有任何问题 (11认同)
  • @NilRad嗯,也许你在考虑PL-SQL?ALTER COLUMN是SQL 2008 R2上的正确语法 (11认同)
  • 我错过了什么吗?为什么这么多人投票?它没有回答这个问题. (4认同)

Rem*_*anu 58

视图可能是使用WITH SCHEMABINDING选项创建的,这意味着它们已明确连接以防止此类更改.看起来架构绑定工作并阻止你打破这些观点,幸运的一天,嘿?在断言对数据库的影响之后,请联系您的数据库管理员并要求他进行更改.

来自MSDN:

SCHEMABINDING

将视图绑定到基础表的模式.指定SCHEMABINDING时,不能以影响视图定义的方式修改基表.必须首先修改或删除视图定义本身,以删除要修改的表的依赖关系.

  • 我遇到了同样的问题,不幸的是我们正在使用SCHEMABINDING视图来索引视图.所以在我的情况下,我没有使用SCHEMABINDING显式阻止对基础表的更改,而只是为了符合SQL Server对使用索引视图的要求.我还想绕过这一点,而不是放弃并重新创建我的观点. (2认同)

小智 6

如果有人想在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)您可以在订户上看到的相同更改(已复制的事务).因此无需重新初始化复制

希望这能帮助所有寻找它的人.


RRU*_*RUZ 5

看到这个链接

使用T-SQL命令调整或修改具有默认约束的MS SQL Server表列

这样一个SQL Server问题的解决方案将是

删除或禁用表列上的DEFAULT约束.

修改表列数据类型和/或数据大小.

在sql表列上重新创建或启用默认约束.

再见