表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约束。
看起来第一行命令完全被忽略了。虽然没有消息表明这一点。
- 把它放在它自己的批处理,我已经尝试使用
sp_executesql
执行第一个命令,没有效果。 - 如果我在SQL Server管理工作室执行第一个命令,然后是第二个命令,那么它执行OK。
我需要让这个改变完全自动化。我怎么能通过脚本得到这个工作?
尝试在两个ALTER TABLE命令之间添加GO关键字