我在单个查询中运行多个ALTER命令时遇到问题。
每当我试图运行以下代码时:
ALTER TABLE Book$
ALTER COLUMN PID INT NOT NULL
ALTER TABLE Book$
ADD CONSTRAINT pk_book PRIMARY KEY(PID)
我收到错误:
Cannot define PRIMARY KEY constraint on nullable column in table 'Book$'.
但如果我单独运行查询,首先:
ALTER TABLE Book$
ALTER COLUMN PID INT NOT NULL
然后:
ALTER TABLE Book$
ADD CONSTRAINT pk_book PRIMARY KEY(PID)
一切似乎都运转得很好。 我究竟做错了什么?谢谢!
答案 0 :(得分:2)
在其间添加GO
(批处理分隔符)以解决问题
ALTER TABLE Book$
ALTER COLUMN PID INT NOT NULL
GO
ALTER TABLE Book$
ADD CONSTRAINT pk_book PRIMARY KEY(PID)
如果没有GO
,整个脚本将被视为单个脚本
答案 1 :(得分:0)
我不确定您使用的是哪个数据库。但是,要解释正在发生的事情,您需要了解语句处理的两个阶段:编译和执行。
编译阶段读取语句并定义执行计划。执行阶段然后运行计划。关于表的更改只是因为编译了一个语句。
正在发生的是两个语句被编译然后执行。当编译第二个时,没有任何改变(好吧,除了第一个语句的执行计划存储在某个地方的事实)。因此,您收到编译错误。
当您分别运行两个时,第一个发生的更改然后第二个发生的更改不会产生错误。