SQL Server 2016数据类型转换错误

时间:2019-02-03 11:02:42

标签: sql sql-server

我有以下查询。由于某种原因,我将多个SELECT语句用作要使用的工具,因此第一行中的FROM子句需要一个SELECT值。

DOCUMENT_ID是整数类型的列。我需要DOCUMENT_ID作为逗号分隔的值,作为此查询的输出。 (例如1234,7786、6478、5835)

问题是我遇到以下错误。有人可以帮忙吗。

将varchar值','转换为数据类型int时转换失败。 我读了一些有关使用CAST转换为NVARCHAR的文章,但是我遇到了同样的语法错误。到底可以在哪里应用?

SELECT DOCUMENT_ID FROM (
SELECT STUFF
(
    (
        SELECT ',' + em.DOCUMENT_ID 
        FROM(
            SELECT distinct a.DOCUMENT_ID AS DOCUMENT_ID FROM A_DOCUMENT a
            inner join PRICE_RECORD wk ON a.DOCUMENT_ID = wk.DOCUMENT_ID
            WHERE a.APPROVAL_STATUS = 'Submitted'
            ) em
        ORDER BY em.DOCUMENT_ID FOR XML PATH('')
    ),
     1, 1, '') AS DOCUMENT_ID
) AS Output

谢谢。

1 个答案:

答案 0 :(得分:3)

如果DOCUMENT_IDint,则将',' + em.DOCUMENT_ID替换为以下之一:

CONCAT(',', em.DOCUMENT_ID) --SQL Server 2012+
',' + CONVERT(varchar(10),em.DOCUMENT_ID)
--Or, if you prefer CAST
',' + CAST(em.DOCUMENT_ID AS varchar(10))

int的{​​{3}}比varchar高,因此您的逗号(',')被隐式转换为int,这导致了转换错误。