[英]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.