我最近在我的一個查詢中使用了IDENTITY_INSERT。在閱讀SQL服務器文檔IDENTITY_INSERT,http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx,有這樣一行說,爲什麼IDENTITY_INSERT被設置爲執行或運行時而不是解析時?
SET IDENTITY_INSERT的設置被設定在執行或運行時,而不是在分析時。
想知道,爲什麼IDENTITY_INSERT在運行時設置不在解析時間?如果以其他方式完成,會有什麼影響?
這不回答'爲什麼IDENTITY_INSERT設置在運行時不在解析時間'的問題。他實質上是問爲什麼優化器在解析命令時不放棄,而不是在運行時炸掉 – gh9
當你真的想到它時,確實如此。解析器和優化器不知道可能被插入到表中的值,所以它不會在優化時爆炸,當它必須強制執行PK或檢查約束定義時,它會在實際執行時炸掉。執行會失敗,但解析語句應該通過,因爲這不需要實際執行數據有效性的約束。優化器/解析器不必將IDENTITY_INSERT設置爲ON/OFF,以驗證INSERT語句以任何方式正確形成。 –
你的評論回答了這個問題,但答案是「打開多個批次插入的能力」並不能真正回答這個問題。 – gh9