我有一个存储过程,其中包含逗号分隔值(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
答案 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
让我知道它是否有效。
干杯。