我在SQL兩個if和else語句執行
if (select count(*) from sys.columns where object_id = (select object_id from sys.tables where name = 'CLIENT_STATUS')) = 4
insert into CLIENT_STATUS select 'NA', 'Inactive', 0, 0 --old version
else
insert into CLIENT_STATUS select 'NA', 'Inactive', 0, 0, 1 --new version
的select count(*) from sys.columns where object_id = (select object_id from sys.tables where name = 'CLIENT_STATUS')
結果是4有這個疑問,但是它總是出現被執行5參數else
版本的查詢。
我在做什麼錯我的if語句?
UPDATE:
這似乎是同時運行statments因爲如果我這樣做
if (select count(*) from sys.columns where object_id = (select object_id from sys.tables where name = 'CLIENT_STATUS')) = 5
insert into CLIENT_STATUS select 'NA', 'Inactive', 0, 0, 1 --new version
else
insert into CLIENT_STATUS select 'NA', 'Inactive', 0, 0 --old version
我得到同樣的錯誤,但現在它說,它做的第一條語句。
UPDATE2: Mikael Eriksson有正確的答案,我改變了我的代碼以解決這個問題。
if ((select count(*) from sys.columns where object_id = (select object_id from sys.tables where name = 'CLIENT_STATUS')) = 5)
execute ('insert into CLIENT_STATUS select ''NA'', ''Inactive'', 0, 0, 1') --new version
else
execute ('insert into CLIENT_STATUS select ''NA'', ''Inactive'', 0, 0') --old version
有沒有辦法解決這個問題? – 2011-06-02 18:06:42
@Scott - 一種方法是 – 2011-06-02 18:10:18
(1)分支代碼,根據列計數調用一個或兩個子進程(2)如果它們總是相同,則在第5列上粘貼一個默認值在這些情況下。唉,像動態SQL,這些感覺很爛。 – 2011-06-02 18:14:58