不要将论点放在引号中。
但是,只需:
select * from tbl where userName in (@users)
也不起作用,因为您试图在in
恰好代表元素列表的字符串上使用该函数。
您需要将字符串转换为数组,然后在 select 语句中使用它:
MSDN 有一个示例函数用于执行此操作:
CREATE FUNCTION dbo.Split
( @Delimiter varchar(5),
@List varchar(8000)
)
RETURNS @TableOfValues table
( RowID smallint IDENTITY(1,1),
[Value] varchar(50)
)
AS
BEGIN
DECLARE @LenString int
WHILE len( @List ) > 0
BEGIN
SELECT @LenString =
(CASE charindex( @Delimiter, @List )
WHEN 0 THEN len( @List )
ELSE ( charindex( @Delimiter, @List ) -1 )
END
)
INSERT INTO @TableOfValues
SELECT substring( @List, 1, @LenString )
SELECT @List =
(CASE ( len( @List ) - @LenString )
WHEN 0 THEN ''
ELSE right( @List, len( @List ) - @LenString - 1 )
END
)
END
RETURN
END
然后像这样使用它:
select * from tbl where userName in (SELECT * FROM dbo.Split( ',', @users ))