4

在使用SELECT..WHERE..<field> IN (value1, val2...).

在“配置数据源”选项卡中,如果我对值进行硬编码SELECT .... WHERE field1 in ('AAA', 'BBB', 'CCC'),则系统运行良好。

但是,如果我定义一个新参数并使用变量传递一个串联的值字符串;无论是@session、Control 还是查询字符串;例如SELECT .... WHERE field1 in @SESSION结果总是空的。

我做了另一个实验,将参数内容减少到只有一个值,效果很好。

简而言之,如果我对一串值进行硬编码,它就可以工作,如果我只传递一个具有单个值的变量,它就可以工作,但是如果我传递一个具有两个值的变量;它失败了。

请告知我是否犯了任何错误或者这是一个已知的错误。

BR SDIGI

4

3 回答 3

3

这行得通。不确定它的效率如何。

CREATE PROCEDURE [dbo].[get_bars_in_foo]
    @bars varchar(255)
AS
BEGIN
    DECLARE @query AS varchar(MAX)
    SET @query = 'SELECT * FROM [foo] WHERE bar IN (' + @bars + ')'
    exec(@query)
END

-- exec [get_bars_in_foo] '1,2,3,4'
于 2012-10-01T03:44:20.610 回答
1

看看这个问题的答案(和你的很相似)

参数化 SQL IN 子句

最终(通过复杂的路线)链接到这个明确的答案:

http://www.sommarskog.se/arrays-in-sql.html

于 2008-12-05T01:35:12.153 回答
0

如果你使用存储过程,你可以使用这个方法,我讨论过如何在 SQL 中做到这一点。

于 2008-12-05T01:52:02.290 回答