【问题标题】:SQL - Running multiple ALTER queriesSQL - 运行多个 ALTER 查询
【发布时间】:2016-12-26 15:18:11
【问题描述】:

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

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

【问题讨论】:

  • 我删除了不兼容的数据库标签。请标记您真正使用的数据库。
  • 在 sql server 中,我可以同时运行两个查询

标签: sql primary-key alter


【解决方案1】:

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

ALTER TABLE Book$
ALTER COLUMN PID INT NOT NULL

GO

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

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

【讨论】:

    【解决方案2】:

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

    编译阶段读取语句并定义执行计划。然后执行阶段运行计划。表的任何内容都不会因为编译了一条语句而发生变化。

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多