SQL - 运行 多个 ALTER 查询

SQL - Running multiple ALTER queries

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

似乎一切正常。 我究竟做错了什么?谢谢!

在两者之间添加 GO(批次分隔符)以解决问题

ALTER TABLE Book$
ALTER COLUMN PID INT NOT NULL

GO

ALTER TABLE Book$
ADD CONSTRAINT pk_book PRIMARY KEY(PID)

没有 GO 整个脚本将被视为单个脚本

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

Compilation阶段读取语句并定义执行计划。然后执行阶段 运行 计划。 table 没有任何变化只是因为语句被编译。

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

当您 运行 将两者分开时,第一个的更改发生,第二个不会产生错误。