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

eivgtgni  于 2022-11-21  发布在  SQL Server
关注(0)|答案(7)|浏览(199)

我正在尝试使用以下命令更改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是由以前的数据库管理员创建的视图。
是否有其他方法可以更改列的大小?

tcomlyy6

tcomlyy61#

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

kxkpmulp2#

这些视图可能是使用WITH SCHEMABINDING选项创建的,这意味着它们被显式地连接起来以防止此类更改。看起来模式绑定起作用了,并防止了您破坏这些视图,真是幸运啊!在它Assert对数据库的影响后,请与您的数据库管理员联系,让他进行更改。
MSDN开始:

计划绑定

将视图绑定到一个或多个基础表的架构。如果指定了SCHEMABINDING,则不能以影响视图定义的方式修改一个或多个基表。必须首先修改或删除视图定义本身才能删除对要修改的表的依赖项。

eaf3rand

eaf3rand3#

如果您想在SQL Server 2008中“增加复制表的列宽”,则无需更改“replicate_ddl=1“的属性,只需按照以下步骤操作即可--
1.打开SSMS
1.连接到发布服务器数据库
1.运行命令--ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
1.它会将列宽从varchar(x)增加到varchar(22),您可以在订阅者上看到相同的更改(事务已复制)。
希望这将有助于所有谁正在寻找它。

zi8p0yeb

zi8p0yeb4#

查看此链接
Resize or Modify a MS SQL Server Table Column with Default Constraint using T-SQL Commands
这样的SQL Server问题的解决方案将是
删除或禁用表列的DEFAULT约束条件。
修改表列数据类型和/或数据大小。
重新创建或重新启用sql表列的默认约束。
再见

4si2a6ki

4si2a6ki5#

下面 是 我 正在 使用 的 程序 版本 的 工作 方式 :可能 对 你 也 有用 。
我 将 只 放置 执行 此 操作 的 指令 和 命令 。 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;

格式
(run命令 以 查看 差异 )
这 将 永远 改变 实际 的 表 , 但 会 变得 更 好 。
我 把 这些 说明 作为 命令 的 注解 。 这 不 是 测试 , 但 可以 帮助 一 个 : )

svujldwt

svujldwt6#

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

j9per5c4

j9per5c47#

您可以分3步更改列的大小:
1.更改视图Address_e并纳入注解列/*Addr1*/
1.运行脚本

ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL

1.然后再次更改视图Address_e,以取消注解列Addr1

相关问题