2015-12-31 170 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'中的一列。也许你应该用示例数据编辑你的问题(或者提出另一个问题),并解释你正在尝试做什么。也许你的代码不清楚。 –