如何使用csv格式的where子句执行SQL select语句



我将以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注入。

最新更新