【问题标题】:SQL "SELECT IN (Value1, Value2...)" with passing variable of values into GridViewSQL“SELECT IN(Value1,Value2 ...)”将值变量传递到GridView
【发布时间】:2010-09-25 10:52:28
【问题描述】:

我在使用SELECT..WHERE..<field> IN (value1, val2...) 创建 GridView 时遇到了一个奇怪的情况。

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

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

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

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

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

BR SDIGI

【问题讨论】:

    标签: sql gridview select session-variables


    【解决方案1】:

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

    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'
    

    【讨论】:

      【解决方案2】:

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

      Parameterize an SQL IN clause

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 2020-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多