0

table的设计者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 Management Studio 中执行第一个命令,然后执行第二个命令,则它执行正常。

我需要让这个改变完全自动化。我怎样才能让它通过脚本工作?

4

1 回答 1

0

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

于 2014-03-12T23:34:22.093 回答