SQL - 运行多个ALTER查询

时间:2016-12-26 15:18:11

标签: sql primary-key alter

我在单个查询中运行多个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)

一切似乎都运转得很好。 我究竟做错了什么?谢谢!

2 个答案:

答案 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)

我不确定您使用的是哪个数据库。但是,要解释正在发生的事情,您需要了解语句处理的两个阶段:编译和执行。

编译阶段读取语句并定义执行计划。执行阶段然后运行计划。关于表的更改只是因为编译了一个语句。

正在发生的是两个语句被编译然后执行。当编译第二个时,没有任何改变(好吧,除了第一个语句的执行计划存储在某个地方的事实)。因此,您收到编译错误。

当您分别运行两个时,第一个发生的更改然后第二个发生的更改不会产生错误。