2010-12-17 48 views
1

這是一個真正令人惱火的問題,因爲我知道,這是一個不好的過程,但這是一個我現在揹負的問題。MSSQL服務器語法檢查,針對一個腳本中的多個環境

當我們的環境改變了一半而不是另一半時,我陷入了瘋狂。一半現在有一個額外的領域。因此,有需要在兩種環境下運行一個基本的插入腳本

例如:

insert into Tbl values ('foo') 

但它需要的其他環境是

insert into Tbl values ('foo','bar') 

我試圖用一個「如果解決這'因爲我們有一個表格來標識你在什麼環境中

if (select name from environment) in ('local','local2') 
insert into Tbl values ('foo') 
else 
insert into Tbl values ('foo, 'bar') 

Unf幸運的是,MS SQL服務器語法檢查我的整個腳本,並注意到else部分與當前表的模式不匹配。

我該如何處理?要求基本上是:這必須是在兩種環境中運行的單個腳本。這可能嗎?

謝謝你的時間。

回答

3

由於語法檢查,你可能需要使用動態SQL:

if (select name from environment) in ('local','local2') 
    execute('insert into Tbl values (''foo'')') 
else 
    execute('insert into Tbl values (''foo'', ''bar'')') 

語法得到僅在執行檢查的內部聲明。

2

你可以嘗試使用動態SQL來規避語法檢查:

if (select name from environment) in ('local','local2') 
exec sp_executesql N'insert into Tbl values (''foo'')' 
else 
exec sp_executesql N'insert into Tbl values (''foo'', ''bar'')' 
相關問題