在子查询中的where子句中使用逗号分隔的整数作为字符串

时间:2017-09-06 19:41:50

标签: sql sql-server database

我有一个存储过程,其中包含逗号分隔值(codeid)的列(' 20045,20069,20079')用于where子句内部子查询一个主要的选择声明。我尝试了一些工作,但无法找到合适的解决方案。

这是我的代码:

    SELECT 
        CodeID, Name,
        Experience,
        (SELECT COALESCE(@CodeDescription + '', '', '''') + CAST([Description] AS varchar(100)) 
         FROM SynCode 
         WHERE CodeID IN (SELECT * 
                          FROM dbo.fnSplitString(codeid, ','))) AS [codeDescription]
    FROM   
        Code
WHERE CodeIdentity = 1

此处SynCode包含每个代码的说明,dnSplitString是将CSV整数字符串转换为表格的函数。

执行上述声明时,我收到以下错误:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

对此有任何帮助将不胜感激。

由于我只需要一行返回,我使用COALESCE用逗号分隔值

编辑: 我有

    CodeID as '20045,20069,20079'
    and Iam Expecinting row result as
20045,20069,20079|Marry|2 years|Finance, Retail, Sales

编辑:CodeID,名称,经验是VARCHAR,SynCode中的CodeID是Int

1 个答案:

答案 0 :(得分:0)

问题在于

  当子查询用作表达式时

您不能将查询放在Selectstatement中,因为它返回多个元素。

尝试以下方法:

SELECT 
    CodeID, Name,
    Experience,
    (SELECT STRING_AGG(Description, ', ') 
     FROM SynCode 
     WHERE CodeID IN (SELECT * 
                      FROM dbo.fnSplitString(codeid, ','))) AS [codeDescription]
FROM   
    Code
WHERE CodeIdentity = 1

让我知道它是否有效。

干杯。