我在SQL Server 2008R2上有一個存儲過程,我想更改它。 SPROC採用一個參數(許多中的一個),它是一個ClientID。我想實現的是這樣的:使用IF或CASE生成IN列表的TSQL
SELECT <lots of stuff> FROM TABLES
<lots of joins>
WHERE
<a few where/and clauses>
AND -- important bit here!
(
IF @ClientID=0 THEN ClientID IN (sub select to get a list of appropriate client ids)
ELSE -- ClientID param is not 0 and therefore we passed in a single, specified ClientID
[email protected]
)
我意識到上面的是有效的SQL很長的路要走,但本質上我希望它說明了這個問題。基本上,一個SPROC的參數,如果0將觸發一些sql來獲得一個ID列表(基本上是一個「IN」語句),如果該值大於0,那麼它是一個特定的ID (對一個指定的值進行簡單的where子句過濾)。
由於它是SPROC,因此通過執行一些預代碼/ sql來獲取多個ClientID列表(如果適用)不是問題。它不必在一個單一的聲明。
有人有任何想法來實現這個最好的方法嗎?
它,而要看是什麼'子選擇來獲得適當的列表客戶端ID「是,但你可以在子查詢上做一個」IN「。有沒有可能'0'是一個有效的'[ClientId]'? – Jodrell 2014-08-27 08:50:47
對不起,應該已經說清楚了,0不是有效的ClientID – Tifosi 2014-08-27 08:54:39
@Dimt的答案應該可以正常工作。 – Jodrell 2014-08-27 09:01:33