2010-03-29 79 views
6

可以說我有一個這樣的腳本:禁用TSQL腳本檢查?

如果(某些情況) 開始從sometable 結束

比方說 選擇somecolumn,即「somecolumn」不存在,條件是不這意味着選擇是不是執行。儘管select不會被執行,但腳本無效,Management Studio會抱怨缺少的列「somecolumn」。

問題:我可以以某種方式禁用這種檢查,以便腳本執行,並且if不是真的,它永遠不會注意到列丟失?

感謝:-)

+0

如果您不必擔心列是否存在,那麼您的設計存在嚴重問題。 – HLGEM 2010-03-30 17:19:13

回答

4

使用動態SQL

if(some condition) 
begin 
    exec ('select somecolumn from sometable') --or sp_executesql 
end 

它實際上是沒有意義的,因爲SQL就是運行這個。它不是一行一行地執行:整個批處理被一次性解析等,並且在這裏產生錯誤,在任何實際運行之前,你的意思是。這是由設計...

+0

+1,打敗了我44秒! – 2010-03-29 15:37:33

+0

不是100% 此代碼適用於我: IF OBJECT_ID('Reports.dbo.RecordsTable')IS NULL 但是,只有普通參數字符串指示table1或2的其他方法會失敗。 但是,動態sql技巧總是有效,但當然有點煩人。 – regeter 2015-03-12 23:13:51

2

您可以創建一個引用不存在的表的過程,但是該規則是唯一的例外。從BOL:當你引用不存在的 表對象

延遲名稱解析只能 使用。在創建存儲過程 時,所有其他對象必須存在 。例如,當您在 存儲過程中引用 中的現有表時,您不能列出該表不存在的 列。

除了使用動態SQL之外,沒有辦法在存儲過程中引用不存在的列。