我将以csv格式传递一个动态id数作为sql参数,并希望在select语句的where子句中使用它们。
我不知道如何在sql中做到这一点。
伪代码看起来像这样:
@ids varchar(max)
select stuff from table
where stuff = each.@ids.split(',')
如有任何帮助,我们将不胜感激。
好的,经过一点研究,我认为最好的方法是使用xml而不是csv,因为这将花费较少的精力,所以我将选择最佳答案并结束此过程。谢谢大家。
如果我正确理解您想要传递动态列表,那么在SQL Server中创建一个表值函数:
CREATE FUNCTION ParseIds (@ids varchar(MAX)) RETURNS @TempIds TABLE (Id INT)
AS
BEGIN
DECLARE @Pos INT
SET @Pos = 1
SET @ids = ',' + @ids + ','
WHILE @Pos < LEN(@ids)
BEGIN
INSERT @TempIds
VALUES (Convert(int, SUBSTRING(@ids,@Pos+1,CHARINDEX(',',@ids,@Pos+1)-@Pos-1)))
SET @Pos = CHARINDEX(',',@ids,@Pos+1)
END
RETURN
END
将您的动态CSV Id列表传递到您的存储过程中,并在查询中使用,如下所示:
select stuff from table
where stuff IN (SELECT id FROM dbo.ParseIds(@ids))
IN
查询可以满足您的需要:
SELECT stuff FROM table WHERE stuff in (1,4,7,9)
如果您从不安全的源(用户输入的@ids等)构造SQL,请考虑SQL注入。