Changing the size of a column referenced by a schema-bound view in 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.

我尝试阅读它,似乎是因为一些视图引用了这个列,而且似乎 SQLServer 实际上是试图删除引发错误的列。

Address_e是前一个 DB 管理员创建的视图。

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

447742 次浏览

这些视图可能是使用 WITHSCHEMABINING 选项创建的,这意味着它们是显式连接起来的,以防止这种更改。看起来计划的约束起作用了,阻止了你打破那些观点,幸运的一天,是吧?联系你的数据库管理员,并要求他做出改变,在它断言对数据库的影响之后。

来自 MSDN:

SCHEMABINDING

将视图绑定到基础表的架构 指定了 SCHEMABINING,则基 table or tables cannot be modified in 会影响视野的方法 视图定义本身 必须首先修改或删除 到 移除对表的依赖项 将被修改。

看看这个链接

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

the solution for such a SQL Server problem is going to be

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

Modifying the table column data type and/or data size.

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

再见

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

以下是我使用的程序版本的工作原理: 也许对您也适用。

我只需要放置执行该操作的指令和命令。类是表的名称。用这个方法在表中改变它本身。不仅仅是搜索过程的回报。


查看表类

select * from class

更改列 FacID (看作“ faci”)和 classnumber (看作“ classnu”)的长度以适应整个标签。

alter table class modify facid varchar (5);


alter table class modify classnumber varchar(11);

再次查看表格看看有什么不同

select * from class;

(run the command again to see the difference)


这样可以更好地改变实际的表。

另外,这些说明是我编的,作为命令的注释。这不是一个测试,但可以帮助一个:)

如果有人想要在 SQLServer2008中“增加复制表的列宽度”,那么就不需要更改“ replicate_ddl=1”的属性。只需按照以下步骤——

  1. 打开 SSMS
  2. 连接到 Publisher 数据库
  3. Run 命令—— ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. 它将增加从 varchar(x)varchar(22)的列宽度,并且在订阅者上可以看到相同的变化(事务得到了复制)。因此不需要重新初始化复制

Hope this will help all who are looking for it.

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

您可以通过三个步骤来更改列的大小:

  1. 修改视图 Address_e并接受注释列 /*Addr1*/
  2. Run your script
ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL
  1. 然后再次更改视图 Address_e,以取消对列 Addr1的注释