SQL Server ALTER COLUMN NOT NULL has no effect



SOME_TABLE的设计者没有定义主键,更糟糕的是,他们将一个可以定义主键的列设置为NULLable(其他列都可以)。

SOME_TABLE.PrinterPos数据中不存在NULL

我正在写一个升级脚本,适用于~50数据库。

以下代码失败:

ALTER TABLE dbo.SOME_TABLE 
ALTER COLUMN PrinterPos smallint NOT NULL;
ALTER TABLE dbo.SOME_TABLE 
ADD CONSTRAINT PK_SOME_TABLE 
PRIMARY KEY CLUSTERED (SOME_TABLE_ID ASC, Store_ID ASC, PrinterPos ASC)
       WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, 
             IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
             ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY];

我得到消息

不能在表'SOME_TABLE'的可空列上定义PRIMARY KEY约束。

看起来第一行命令完全被忽略了。虽然没有消息表明这一点。

  1. 把它放在它自己的批处理,我已经尝试使用sp_executesql执行第一个命令,没有效果。
  2. 如果我在SQL Server管理工作室执行第一个命令,然后是第二个命令,那么它执行OK。

我需要让这个改变完全自动化。我怎么能通过脚本得到这个工作?

尝试在两个ALTER TABLE命令之间添加GO关键字

相关内容

  • 没有找到相关文章

最新更新