我正在尝试使用以下命令更改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
是由前一位数据库管理员创建的视图。
还有其他方法可以改变列的大小吗?
答案 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
”的属性。只需按照以下步骤 -
ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
varchar(x)
增加到varchar(22)
,并且您可以在订阅者上看到相同的更改(已复制的事务)。因此无需重新初始化复制希望这会帮助所有寻找它的人。
答案 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)
检查列排序规则。此脚本可能会将排序规则更改为表默认值。将当前排序规则添加到脚本中。