1

我以 csv 格式传入动态数量的 id 作为 sql 参数,并希望在 select 语句的 where 子句中使用它们。

我无法理解如何在 sql 中执行此操作。

伪代码看起来像这样:

@ids varchar(max)

select stuff from table
where stuff =  each.@ids.split(',')

任何帮助将不胜感激。

好的,经过一番研究,我认为最好的方法是使用 xml 而不是 csv,因为这样会更省力,所以我将选择最佳答案并关闭它。多谢你们。

4

2 回答 2

3

如果我正确理解您想要传递一个动态列表,那么在 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)) 
于 2013-07-02T22:40:04.400 回答
0

IN查询可以满足您的需要:

SELECT stuff FROM table WHERE stuff in (1,4,7,9)

如果您从不安全的来源(用户输入的@id 等)构建 SQL,请考虑 SQL 注入

于 2013-07-02T22:24:46.227 回答