【问题标题】:How to pass comma seperated values in IN where clause如何在 IN where 子句中传递逗号分隔值
【发布时间】:2015-06-19 06:30:49
【问题描述】:

我想问一下如何将'30','31','32'传递给SQL WHERE IN子句例如

EXEC SQL DECLARE abcd CURSOR FOR SELECT Consignment FROM Transaction WHERE order_type IN (:dest)

其中 dest 将保存值 '30','31','32'。

我已经尝试过上面的例子,但它不起作用 SQL 没有返回任何结果。

【问题讨论】:

  • 你知道 any 语言会在没有提示的情况下,在传递单个字符串参数的函数上决定检查该参数的内容,查找逗号,然后而是自动将其视为多个参数?我不知道,SQL 肯定不是。
  • 我将 dest 创建为 ,当我打印 dest 时,我得到 '30','31','32'
  • 我想问一下如何将'30','31','32'传递给EXEC SQL DECLARE abcd CURSOR FOR SELECT Consignment FROM Transaction WHERE order_type IN(:dest),其中dest将保存值 '30','31','32'
  • 在您最喜欢的搜索引擎中使用问题标题将返回有用的方法。唉,没有“标准”或“简单”的方法。例如Using comma separated value parameter strings in SQL IN clauses
  • 感谢您的评论。我还想告诉您,这里的 dest 是 C 字符串,如 char dest[20]={"'30','31','32'。"} ,我将其作为 order_type IN (:dest) 传递。

标签: proc


【解决方案1】:

没有简单的方法。在分隔符(,)上拆分数据,在 while 循环中插入表中。然后“IN(从临时表中选择“column_name”)”。现在拆分并插入临时表是一件棘手的事情。

DECLARE @StringToSeperate VARCHAR(10)
SELECT @StringToSeperate = '1,2,5'

--SELECT @StringToSeperate IDs INTO #Test


CREATE TABLE #valus (ID int) 

DECLARE @CommaSeperatedValue VARCHAR(255) = ''
DECLARE @Position INT = LEN(@StringToSeperate)

--Add Each Value
WHILE CHARINDEX(',', @StringToSeperate) > 0
BEGIN
    SELECT @Position  = CHARINDEX(',', @StringToSeperate)  
    SELECT @CommaSeperatedValue = SUBSTRING(@StringToSeperate, 1, @Position-1)

    INSERT INTO #valus 
    SELECT @CommaSeperatedValue

    SELECT @StringToSeperate = SUBSTRING(@StringToSeperate, @Position+1, LEN(@StringToSeperate)-@Position)

END

--Add Last Value
IF (LEN(LTRIM(RTRIM(@StringToSeperate)))>0)
BEGIN
    INSERT INTO #valus
    SELECT SUBSTRING(@StringToSeperate, 1, @Position)
END

SELECT ID FROM #valus

【讨论】:

  • 我明天可以举个例子。
  • 感谢 barun 提供的示例,但我需要 proc 中的代码 ....根据您的代码 DECLARE @StringToSeperate VARCHAR(10) ... @ is not support in pro*c
  • 它是一个 Tsql 语法。您正在研究哪个数据库?您可以随时根据您的数据库更改语法。
  • 我正在研究 proc ...我正在尝试更改 proc,但如果您知道 proc,请举个例子。
  • 您可以随时发布 proc。我可以查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 2012-07-16
  • 2019-08-23
  • 1970-01-01
  • 2020-12-09
  • 2018-04-08
相关资源
最近更新 更多