我在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