繁体   English   中英

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

[英]Why IDENTITY_INSERT is set at execute or run time and not at parse time?

我最近在查询之一中使用了IDENTITY_INSERT。 在阅读IDENTITY_INSERT的 SQL Server文档时, http://technet.microsoft.com/zh-cn/library/aa259221%28v=sql.80%29.aspx上有一行显示,

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

想知道为什么在运行时而不是在解析时设置IDENTITY_INSERT? 如果以其他方式进行会产生什么影响?

如果它是在解析时完成的,那么您将无法在单个批处理中为多个表将其打开。 由于它是在运行时处理的,因此可以在一个批处理中为多个表打开和关闭它。 因为您一次只能为一个表启用该设置,这一点很重要。

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

执行sql查询有几个阶段

1) 解析器 (您的问题所在)-此阶段是验证sql的地方。 可以认为它只是看一个句子并说结构正确。 您现在真的不在乎它的逻辑。

2) Algebrizer-这是sql绑定到基础sql服务器对象的地方。 再次,优化器不在乎逻辑,它只是在乎所有对象都已绑定-这也是为sql形成Binary树的地方3) 探索 -这是收集查询的直方图,优化器看起来一个足够好的计划(同样,逻辑也不在乎)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM