我想从sql中实现以下功能,假设我有@accountId int
作为存储过程中的参数,现在如果我将参数作为99999
传递,那么在所有select语句中它选择{{1} }否则,如果我传递任何其他参数,则选择WHERE AccountId <> 124
。这个语句是一个很长的存储过程的一部分,所以我没有包含整个过程。
WHERE AccountId=@accountId
或者我可以从CASE声明中获得类似的结果。 喜欢的东西,
WHERE (IF(AccountId = 99999)
BEGIN
AccountId <> 124
END
ELSE
BEGIN
AccountId = @accountId
END)
我已经编辑了我的问题,对于以不相关的方式提出这个问题我感到抱歉。如果您有意义或需要任何进一步的信息,请告诉我。
答案 0 :(得分:2)
WHERE (AccountId = 1 and SenderId <> 10)
or (AccountId <> 1 and SenderId = 10)
WHERE (@AccountId = 9999 and SenderId <> 10)
or (@AccountId <> 9999 and SenderId = @AccountId)
答案 1 :(得分:0)
我通常使用的“一个或所有”语法是这样的: (对所有人都是-1,我不会使用任何理论上可能的正数。)
WHERE
@AccountId IN (AccountID, -1)
并添加您的附加条件,这应该有效:
WHERE
@AccountId IN (AccountID, -1)
AND AccountID <> IIF(@AccountID = -1, 124, -1)