SQL Server - 必须是查询批处理中的第一条语句 - 是什么以及为什么?

Nev*_*ing 7 sql-server scripting

我找不到创建时命令必须是查询批处理中的第一条语句的对象类型列表。到目前为止,我发现 function/stored_procedure/view 必须是第一个。

有谁知道为什么需要这样做?我确定有一个很好的理由,但它逃脱了我。想到存储过程的唯一原因是过程结束后对代码的奇怪解释。当 SP 被调用时,SQL 服务器仍然执行代码,如果有更多的 CREATE STATEMENTS 结果会一团糟。

背景:我正在尝试创建创建/删除/禁用/启用等脚本,并且需要知道在执行之前将什么放入动态 exec() 中。是的,我可能会将所有语句都包装在 exec() 中,但是我不会学到任何东西。

boj*_*jan 10

来自http://msdn.microsoft.com/en-us/library/ms175502(v=sql.105).aspx

批处理使用规则

以下规则适用于使用批处理:

  • CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER 和 CREATE VIEW 语句不能与批处理中的其他语句组合。CREATE 语句必须启动批处理。该批处理中的所有其他语句将被解释为第一个 CREATE 语句定义的一部分。
  • 不能更改表,然后在同一批次中引用新列。
  • 如果 EXECUTE 语句是批处理中的第一条语句,则不需要 EXECUTE 关键字。如果 EXECUTE 语句不是批处理中的第一条语句,则需要 EXECUTE 关键字。

  • 谢谢你的名单。太糟糕了,我仍然不明白为什么需要它。特别是对于表,您可以创建表然后插入其中,但不能添加新列然后引用它。我猜“没有计划”是可以接受的(表尚不存在),但不正确的不是(存在具有“不同”模式的表。 (4认同)
  • 抱歉,无法帮助您。这些规则可能是系统工作方式的因果关系,而不是有意制定的。必须支持创建表,因为您必须能够创建临时表并在单个批次中操作它们。因此,该功能是您必须“计划”的。他们可能选择跳过向现有表批量添加列。但这只是我的猜测。:) (2认同)