如何在SQL Server存储过程中使用WHERE id IN(@a_varchar_variable)?

Man*_*ang 1 sql stored-procedures sql-server-2008

在我的表id列的数据类型是int.

我有一个要选择的项目ID列表.

所以,这是我的一些代码:

DECLARE @user_list
SELECT @user_list=(
SELECT user_list
FROM sometable
WHERE rowNum=xxx
);
SELECT *
FROM anotherTable
WHERE user_id IN(@user_list)
Run Code Online (Sandbox Code Playgroud)

但它不起作用,错误消息如:

无法将varchar转换为int

谢谢!

Nit*_*jay 7

您可以创建一个分割功能,并在需要时使用.

CREATE FUNCTION [dbo].[Split]
(   
    @List nvarchar(max),
    @SplitOn nvarchar(1)
)
RETURNS @RtnValue table (
    Id int identity(1,1),
    Value nvarchar(max)
)
AS
BEGIN
    While (Charindex(@SplitOn,@List)>0)
    Begin 
        Insert Into @RtnValue (value)
        Select 
            Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
        Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
    End 

    Insert Into @RtnValue (Value)
    Select Value = ltrim(rtrim(@List))

    Return
END
Run Code Online (Sandbox Code Playgroud)

之后,您可以在查询中调用该函数,如下所示.

SELECT * FROM anotherTable WHERE user_id IN(dbo.split(@user_list,','))
Run Code Online (Sandbox Code Playgroud)

否则,您必须使用动态查询.