对逗号子句使用逗号分隔的varchar

时间:2014-07-31 10:36:08

标签: tsql sql-server-2012

我希望在IN子句中使用的userId列表为DECLARE @userId AS VARCHAR = '1,4,65,12'。结果应该像WHERE Id IN (1,4,65,12)

我尝试过以下代码:

ALTER FUNCTION [dbo].[GetUser](@userId VARCHAR)
RETURNS TABLE AS RETURN(
    SELECT *
    FROM UserTable
    WHERE Id IN (@userId))

但它仅适用于第一个int值。在此示例中,它仅适用于1。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您不能像这样使用IN子句。它会在IN子句中编译为单个字符串。但IN条款需要单独值。

WHERE id in (@userId)

编译到

WHERE id in ('1,4,65,12')

但它应该是

WHERE id in (1,4,65,12)

如果您确实需要查询是动态的,那么您可以使用

exec('SELECT * FROM UserTable WHERE Id IN (' + @userId + ')')

你需要给输入参数一个像

这样的长度
ALTER FUNCTION [dbo].[GetUser](@userId VARCHAR(1000))

答案 1 :(得分:0)

我发现这个问题是一样的: Parse comma-separated string to make IN List of strings in the Where clause

我打算尝试这个解决方案。