Tsql 对IN子句使用逗号分隔的varchar
我有一个userId列表Tsql 对IN子句使用逗号分隔的varchar,tsql,sql-server-2012,Tsql,Sql Server 2012,我有一个userId列表DECLARE@userId as VARCHAR='1,4,65,12',我想在in子句中使用它。结果应该类似于,其中Id位于(1,4,65,12) 我尝试了以下代码: ALTER FUNCTION [dbo].[GetUser](@userId VARCHAR) RETURNS TABLE AS RETURN( SELECT * FROM UserTable WHERE Id IN (@userId)) 但它只适用于第一个int值。在本例中,
DECLARE@userId as VARCHAR='1,4,65,12'
,我想在in子句中使用它。结果应该类似于,其中Id位于(1,4,65,12)
我尝试了以下代码:
ALTER FUNCTION [dbo].[GetUser](@userId VARCHAR)
RETURNS TABLE AS RETURN(
SELECT *
FROM UserTable
WHERE Id IN (@userId))
但它只适用于第一个int值。在本例中,它仅适用于1
有什么想法吗?你不能在子句中使用这样的
。它编译为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))
我发现这个问题是一样的:
我将尝试此解决方案。您的逗号分隔值正在转换为的单个整数。我已在另一个问题中回答了此问题,请查看您是否接受此解决方案。谢谢重播!我已经尝试过了,但是exec('SELECT*FROM UserTable WHERE Id IN(+@userId+'))
返回与WHERE Id IN(@userId))
相同的结果。我更新了答案。您需要为参数指定一个长度:(@userId VARCHAR(1000))
,否则它只是一个字符