【问题标题】:Creating a WHERE IN clause using SQL JQUERY C# JavaScript使用 SQL JQUERY C# JavaScript 创建 WHERE IN 子句
【发布时间】:2014-01-17 09:40:49
【问题描述】:

我正在写一个大的 SQL 语句,它有一个大的WHERE 子句:

SELECT ID FROM TABLE
WHERE ID IN 
(
'C1',
'C2',
'C3',
'C4',
)

有没有一种方法可以包装我的值列表或以编程方式创建WHERE ID IN 子句?

我的值列表如下:

C1
C2
C3
C4
C5
C6
C7
C8
C9
C10
C11

【问题讨论】:

  • 是存储在表列中的值列表吗?
  • 这个WHERE ID IN 子句将以什么语言实现? SQL? JQUERY? C#? JavaScript?全部?
  • 我只是想用一种编程方法来创建SQL语法。

标签: c# javascript jquery sql winforms


【解决方案1】:

如果您希望在 IN 子句动态 sql 中将值列表声明为 ('alpha','beta','gamma'),请使用类似的东西。

function retCol(arr) { return (arr.length ? "'" + arr.join("','") + "'" : ""); }.

然后将值存储在变量中 var myArray = new Array("alpha","beta","gamma"); var sortedVal = retCol(myArray); var sqlString = "SELECT ID FROM TABLE WHERE ID IN ("+sortedVal+")

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您将需要动态 SQL

    DECLARE @query varchar(1000)
    DECLARE @colList varchar(500)
    
    SELECT @colList=COALESCE(@colList+',','') + columnName
    FROM yourTable
    
    SET @query = 'SELECT id FROM otherTable WHERE id IN ('+ @colList +')'
    
    EXEC(@query)
    

    【讨论】:

    • 变量@colList 包含表列的逗号分隔值。
    【解决方案3】:

    我们通常将所有 Id 作为连接的varchar 传递,如下所示:

    declare @ids varchar(max) = 'C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11'
    

    然后我们有一个函数将varchar拆分成table,查询写成这样:

    SELECT ID FROM TABLE
    WHERE ID IN (select item from [dbo].[func_Split](@ids, ','))
    

    我们通常将@ids 作为代码中的参数传递,因此您可以在那里创建字符串。或者您在 SQL 中创建它。 见函数func_Split here


    也可以像 mhasan 的例子那样使用,以避免动态 SQL:

    DECLARE @colList varchar(max)
    
    SELECT @colList=COALESCE(@colList+',','') + columnName
    FROM yourTable
    
    SELECT ID FROM TABLE
    WHERE ID IN (select item from [dbo].[func_Split](@colList, ','))
    

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2013-10-16
      • 2011-03-28
      • 1970-01-01
      • 2021-03-17
      • 2013-03-08
      相关资源
      最近更新 更多