2015-12-31 168 views
2

我想測試兩個TaskChangeLogIDs其中ID「28」具有爲0的NewRollback和ID「31」具有1如何選擇if語句

一個NewRollback我想確保根據其ID是稱爲,它會選擇正確的NewRollback編號。我在下面的代碼中看到一個錯誤,在新窗口中,所以只需要幫助調整它,並學習如何在未來測試這樣的事情。我只在IF語句行中出現錯誤。

SELECT isnull(NewRollback, 0) FROM Core.TaskChangeLog 
WHERE TaskChangeLogID = 28 

SELECT isnull(NewRollback, 0) FROM Core.TaskChangeLog 
WHERE TaskChangeLogID = 31 

IF (NewRollback = 1) 

Select * from Core.TaskChangeLog where NewRollback = 1 

ELSE 
    BEGIN 

    Select * from Core.TaskChangeLog where NewRollback = 0 

    END 
+1

出於好奇,你在發佈代碼時遇到了什麼錯誤? –

+0

你知道你通常聲明一個SQL變量嗎? https://technet.microsoft.com/en-us/library/ms187953(v=sql.105).aspx有更多的信息。 –

回答

2

你不需要IF條件,這樣做只是AND/OR邏輯將做的工作

嘗試這種方式

Select * from Core.TaskChangeLog 
where (NewRollback = 1 and askChangeLogID = 28) 
    OR (NewRollback = 0 and askChangeLogID = 31) 

要做到根據select結果一些動作試試這個

IF EXISTS (Select * from Core.TaskChangeLog 
    where NewRollback = 1 and askChangeLogID = 28) -- Replace with your ID 
BEGIN 
--some action 
END 
IF EXISTS (Select * from Core.TaskChangeLog 
    where NewRollback = 0 and askChangeLogID = 28) 
BEGIN 
--some action 
END 
2

如何將所有這些放在一個查詢中?這是我最好的猜測,邏輯你想要的:

Select * 
from Core.TaskChangeLog 
where NewRollback = (SELECT COALESCE(NewRollback, 0) 
        FROM Core.TaskChangeLog 
        WHERE TaskChangeLogID = XX 
        ); 

您的代碼失敗,因爲在IFNewRollback是不確定的。你可以使用一個變量,但這會使代碼複雜化。而且,代碼應該簡化而不是變得更復雜。

+0

我可以問Gordon,如果我想根據NewRollback值執行特定的proc,那我該如何添加這些值?例如。 exec proc1如果新回滾是1並且exec proc 0是newrollback是0 – BruceyBandit

+0

@BruceyBandit。 。你的問題表明'NewRollback'是'TaskChangeLog'中的一列。也許你應該用示例數據編輯你的問題(或者提出另一個問題),並解釋你正在嘗試做什麼。也許你的代碼不清楚。 –