簡體   English   中英

當@parm = -1返回IN時,否則返回@parm值

[英]When @parm =-1 return with IN, else return @parm value

我想過濾查詢,但是知道語法:

這是我不正確的語法:

WHERE 
 (@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4)) 
else 
  Status.StatusId = @StatusId)
WHERE
(@StatusId = -1 AND Status.StatusID IN (1,2,3,4))
OR
(@StatusId <> -1 AND Status.StatusID = @StatusId)

請注意,如果@StatusId為null,則@StatusId <> -1返回false。 我假設僅在@StatusId不等於-1時才進行相等性檢查。 如果不是這種情況,則可以從第二個子句中刪除該部分。

您需要使用布爾邏輯。 嘗試這個:

WHERE 
 ((@StatusId = - 1 AND Status.StatusId IN (1, 2, 3, 4)) OR Status.StatusId = @StatusId)

請注意,整個語句都用括號括起來。

您可以這樣做,但是這樣做可能會導致查詢性能問題(搜索參數嗅探)。 更好的方法是根據@StatusID的值動態生成正確的SQL,然后僅運行所需的位。

Where (
  @StatusID = -1 And 
  Status.StatusID In (1, 2, 3, 4)
) Or (
  @StatusID != -1 And
  Status.StatusID = @StatusID
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM