我希望在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。
有什么想法吗?
答案 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
我打算尝试这个解决方案。