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
谢谢!
您可以创建一个分割功能,并在需要时使用.
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)
否则,您必须使用动态查询.