为什么IDENTITY_INSERT在执行或运行时设置而不是在解析时设置?

时间:2014-02-22 01:32:06

标签: sql sql-server

我最近在我的一个查询中使用过IDENTITY_INSERT。在阅读 IDENTITY_INSERT http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx的SQL服务器文档时,有一行说明,

  

SET IDENTITY_INSERT的设置在执行或运行时设置,而不是在分析时设置。

很难理解,为什么IDENTITY_INSERT在运行时设置而不是在解析时?如果以其他方式完成会有什么影响?

2 个答案:

答案 0 :(得分:2)

如果在分析时完成,则无法在单个批次中为多个表启用它。由于它在运行时处理,您可以在一个批处理中为多个表打开和关闭它。因为您只能在一个重要的时间为一个表启用该设置。

答案 1 :(得分:-2)

原因是当您解析SQL查询时,您正在验证sql是否正确。

执行sql查询有几个阶段

1)解析器(您的问题在哪里)       - 这个阶段是验证sql的地方。把它想象成一个句子并说结构是正确的。此时你真的不关心它的逻辑。

2) Algebrizer       - 这是sql绑定到底层sql server对象的地方。同样,优化器不关心逻辑,它只关心所有对象绑定       - 这也是为sql形成二叉树的地方 3)探索   - 这是为查询收集组织结构的地方,优化器寻找一个足够好的计划(同样逻辑不关心)

4)执行。这里您的逻辑错误是在哪里注意到的。因此,为什么你在运行时看到它而不是解析时间。因为这里的逻辑实际上是经过测试的