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

时间:2009-08-24 01:55:47

标签: sql sql-server

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

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是由前一位数据库管理员创建的视图。

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

6 个答案:

答案 0 :(得分:256)

ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

答案 1 :(得分:58)

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

来自MSDN

  

<强> SCHEMABINDING

     

将视图绑定到基础表的模式。什么时候   指定SCHEMABINDING,作为基础   表格或表格无法修改   一种会影响视图的方式   定义。 视图定义本身   首先必须修改或删除   删除表上的依赖项   将被修改。

答案 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),并且您可以在订阅者上看到相同的更改(已复制的事务)。因此无需重新初始化复制
  5. 希望这会帮助所有寻找它的人。

答案 3 :(得分:5)

请参阅此链接

Resize or Modify a MS SQL Server Table Column with Default Constraint using T-SQL Commands

此类SQL Server问题的解决方案将是

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

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

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

再见

答案 4 :(得分:2)

这与我正在使用的程序版本有关:也可能适合你。

我将放置执行它的指令和命令。 class是表的名称。你用这种方法在表中改变它。不仅仅是搜索过程的回报。


查看表类

select * from class

更改列FacID(视为“faci”)和classnumber(视为“classnu”)的长度以适合整个标签。

alter table class modify facid varchar (5);

alter table class modify classnumber varchar(11);

再次查看表以查看差异

select * from class;

(再次运行命令以查看差异)


这会改变实际表格,但更好。

P.S。我将这些说明作为命令的注释。这不是一个测试,但可以帮助一个:)

答案 5 :(得分:0)

检查列排序规则。此脚本可能会将排序规则更改为表默认值。将当前排序规则添加到脚本中。