我正在处理存储过程以获取案例的帐户。如果@accounts
参数为NULL
,我想获取该案例的所有帐户。如果@accounts
为NOT NULL
,那么它将是逗号分隔的accountid字符串。我想有一个可以处理这个问题的where子句。如果@accounts
为NULL
,那么就会抓住案例的所有帐户。否则,请使用@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
非常感谢!
答案 0 :(得分:3)
这对我有用。添加您在帖子中指明的(@accounts IS NULL OR @accounts LIKE ('%,' + CAST(t.caseId AS VARCHAR(255)) + ',%'))
。当然你必须确保@accounts中的第一个字符和最后一个字符是逗号,但这是我认为最简单的。没有逗号会错误地返回id,例如:拥有@accounts = 12会返回id 1,2和12.使用逗号并确保它们是第一个和最后一个字符可以防止这种情况发生。