1

在我的表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)

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

无法将 varchar 转换为 int

谢谢!

4

4 回答 4

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

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

SELECT * FROM anotherTable WHERE user_id IN(dbo.split(@user_list,','))

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

于 2012-08-20T08:14:01.967 回答
0

你可以使用动态sql

exec('
SELECT *
FROM anotherTable
WHERE user_id IN('+@user_list+')')
于 2012-08-20T08:05:47.707 回答
0

如果你创建@user_list一个表变量,你可以像任何其他表一样加入或过滤它

 declare @user_list table (id int)
 insert @user_list(id)
 SELECT user_list 
 FROM sometable 
 WHERE rowNum=xxx 


 SELECT * 
 FROM anotherTable 
 WHERE user_id IN(select Id from @user_list) 
于 2012-08-20T08:07:46.117 回答
0

只需使用一个表变量,它允许您将普通单词添加到变量中:

DECLARE @user_list AS TABLE (user_id int NOT NULL);

INSERT @user_list
SELECT user_list
FROM sometable
WHERE rowNum=xxx;

SELECT *
FROM anotherTable
WHERE user_id IN (SELECT user_id FROM @user_list)
于 2012-08-20T08:08:47.223 回答