我最近在我的一个查询中使用过IDENTITY_INSERT。在阅读 IDENTITY_INSERT ,http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx的SQL服务器文档时,有一行说明,
SET IDENTITY_INSERT的设置在执行或运行时设置,而不是在分析时设置。
很难理解,为什么IDENTITY_INSERT在运行时设置而不是在解析时?如果以其他方式完成会有什么影响?
答案 0 :(得分:2)
如果在分析时完成,则无法在单个批次中为多个表启用它。由于它在运行时处理,您可以在一个批处理中为多个表打开和关闭它。因为您只能在一个重要的时间为一个表启用该设置。
答案 1 :(得分:-2)
原因是当您解析SQL查询时,您正在验证sql是否正确。
执行sql查询有几个阶段
1)解析器(您的问题在哪里) - 这个阶段是验证sql的地方。把它想象成一个句子并说结构是正确的。此时你真的不关心它的逻辑。
2) Algebrizer - 这是sql绑定到底层sql server对象的地方。同样,优化器不关心逻辑,它只关心所有对象绑定 - 这也是为sql形成二叉树的地方 3)探索 - 这是为查询收集组织结构的地方,优化器寻找一个足够好的计划(同样逻辑不关心)
4)执行。这里您的逻辑错误是在哪里注意到的。因此,为什么你在运行时看到它而不是解析时间。因为这里的逻辑实际上是经过测试的