SQL WHERE子句需要是动态的

时间:2012-07-25 22:33:08

标签: sql tsql where-clause

我正在处理存储过程以获取案例的帐户。如果@accounts参数为NULL,我想获取该案例的所有帐户。如果@accountsNOT NULL,那么它将是逗号分隔的accountid字符串。我想有一个可以处理这个问题的where子句。如果@accountsNULL,那么就会抓住案例的所有帐户。否则,请使用@accounts参数并使用指定的帐户ID获取帐户。我想避免使用一个很大的IF语句,要求我使用2个不同的WHERE子句进行两次查询。

DECLARE @caseId BIGINT,
    DECLARE @accounts VARCHAR(255)

    SELECT TOP 1 @userId = userId FROM TblTraceCur t
    WHERE caseId = @caseid
    ORDER BY processDate DESC

    SELECT    
              .... (select logic) ...
    WHERE     
              t.caseId = @caseID AND 
              t.userId = @userId AND
              t.shortStock = 0 AND
              ... (where I need the new logic) ...
    order by t.tracln ASC

非常感谢!

1 个答案:

答案 0 :(得分:3)

这对我有用。添加您在帖子中指明的(@accounts IS NULL OR @accounts LIKE ('%,' + CAST(t.caseId AS VARCHAR(255)) + ',%'))。当然你必须确保@accounts中的第一个字符和最后一个字符是逗号,但这是我认为最简单的。没有逗号会错误地返回id,例如:拥有@accounts = 12会返回id 1,2和12.使用逗号并确保它们是第一个和最后一个字符可以防止这种情况发生。