我有以下SQL语句:
WITH CTE(Col01,...,Col05) AS
(
...
)
SELECT ....
,CASE ....
WHEN ... THEN CASE ...
WHEN 0 THEN ...
ELSE (SELECT STUFF((SELECT ',' + CAST(Col002 AS NVARCHAR(10)) FROM TableOne WHERE Col05=CTE.Col05 FOR XML PATH('')),1, 1,''))
END
WHEN ... THEN ...
WHEN ... THEN ...
ELSE ...
END
,...
FROM TableOne
CROSS APPLY CTE
WHERE TableOne.Col01=CTE.Col01
我想从列表信息中返回CSV列表 - 当我单独执行它时语句正常工作,但在上面的sql语句语法中,它会生成以下错误:
Msg 245,Level 16,State 1,Line 1
将nvarchar值'101,102,103,108,109,110,112,113,114,115,116,117,118,119,120,121,122,126,130,135,164,165,218'转换为数据类型int时转换失败。
如果我将声明替换为白色'1'或1,它就没有错误。为什么要尝试将CSV列表转换为int?
答案 0 :(得分:0)
我真的很抱歉,我没有提供有关查询的更多信息 - 现在我已经找到导致问题的原因,我发现在没有显示整个图片的情况下很难找到它。
当我作为nvarchar转换所有返回可能的值时,问题得到修复。出于某种原因,如果其中一个返回值为int,则SQL服务器也会尝试将所有值转换为int。
此链接有助于解决我的问题:
http://www.fmsinc.com/free/newtips/sql/sqltip10.asp
编辑:我认为这是有道理的 - 你可以通过case-when语句得到不同的结果,但它们应该是一种类型。