使用SELECT..WHERE..<field> IN (value1, val2...)
创建GridView时遇到了一个奇怪的问题。
在“配置数据源”选项卡中,如果我对值SELECT .... WHERE field1 in ('AAA', 'BBB', 'CCC')
进行硬编码,则系统运行良好。
但是,如果我定义一个新参数并使用变量传入连接的值字符串;无论是@session,Control还是querystring;例如SELECT .... WHERE field1 in @SESSION
结果始终为空。
我通过将参数内容减少到只有一个值来做另一个实验,效果很好。
简而言之, 如果我硬编码一串值,它可以工作, 如果我只传递一个单值的变量,它可以工作, 但是如果我传递一个带有两个值的变量;它失败了。
请告知我是否犯了任何错误,或者这是一个已知错误。
BR SDIGI
答案 0 :(得分: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'
答案 1 :(得分:1)
看看这个问题的答案(与你的问题非常相似)
最终将(通过复杂的路线)链接到这个明确的答案:
答案 2 :(得分:0)
如果您继续使用存储过程,可以使用this method,我在SQL中讨论了如何使用它。