SQL Server ALTER COLUMN NOT NULL无效

时间:2014-03-12 21:09:31

标签: sql sql-server-2005 alter-column

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];

我收到了消息

  

无法在表格中对可空列定义PRIMARY KEY约束' SOME_TABLE'。

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

  1. 要把它放在自己的批处理中,我尝试使用sp_executesql执行第一个命令,但没有效果。
  2. 如果我在SQL Server Management Studio中执行第一个命令,然后执行第二个命令,则执行OK。
  3. 我需要完全自动化这一变化。如何通过脚本使其工作?

1 个答案:

答案 0 :(得分:0)

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