簡體   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