在我的表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
谢谢!
在我的表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
谢谢!
您可以创建一个拆分功能,并在您需要时使用。
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,','))
否则,您必须使用动态查询。
你可以使用动态sql
exec('
SELECT *
FROM anotherTable
WHERE user_id IN('+@user_list+')')
如果你创建@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)
只需使用一个表变量,它允许您将普通单词添加到变量中:
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)