使用Param中的Where in

时间:2009-12-04 15:49:25

标签: sql-server

如何在“where in”查询中为多个值使用param:

Select [..] where str in ('AB','BC')

当然,这不允许多个值:

Select [..] where str in (@param)

3 个答案:

答案 0 :(得分:3)

如果您使用的是SQL Server 2008,则将每个值添加为单独的参数的替代方法是传入table valued parameter,这样您就可以执行以下操作:

SELECT...
FROM YourTable t
    JOIN @TableParam p ON t.str = p.str

如果您没有使用SQL 2008,并且您实际上想要将所有值作为一个CSV字符串传递,那么另一种常见方法是使用用户定义的函数将CSV字符串拆分出来并返回一个TABLE然后可以加入,例如

SELECT ....
FROM YourTable t
    JOIN dbo.fnSplit(@param) s ON t.str = s.str

答案 1 :(得分:1)

您需要将每个参数添加为IN子句中的值,例如

where str in (@param1, @param2, @param3)

或者,你可以手动创建一个查询并执行它(虽然这也充满了危险)。

编辑:所以,只是为了澄清一下,因为你收到一串逗号分隔的值然后你想在IN子句中使用,你需要做一些astander建议并将你的字符串拆分成一个表然后你可以在条款中使用它。

使用提到的links旁观者之一,您可以执行以下操作:

select [...]
where str in (select items from dbo.split(@ItemString))

(逗号分隔的值在@ItemString中)。

答案 2 :(得分:1)