如何在不截断的情况下将多个项目合并为单个n / varchar变量

时间:2013-07-04 04:31:46

标签: sql sql-server tsql

我正在尝试将大量记录ID合并为一个逗号分隔的字符串变量。但是,生成的n / varchar变量始终被截断为4096个字符。

这是我正在尝试的SQL语句 -

DECLARE @docIds varchar(max)
SELECT @docIds = COALESCE(@docIds + ',', '') + CAST(docUid AS varchar(32))
FROM Documents

我找到了许多关于n / varchar(max)截断和连接的其他SO链接,但似乎无法解决上面的查询。我也试过了 -

DECLARE @docIds varchar(max) SET @docIds = ''
SELECT @docIds = @docIds + ',' + CAST(docUid AS varchar(32))
FROM Documents
SET @docIds = STUFF(@docIds, 1, 1, '');

从上述两个查询中,SELECT LEN(@docIds)最多只返回4096

问题:如何在没有截断问题的情况下将上述检索完成到单个字符串变量中?

1 个答案:

答案 0 :(得分:1)

试试这个 -

DECLARE @docIds VARCHAR(MAX)

SELECT @docIds = STUFF((
    SELECT ',' + CONVERT(VARCHAR(50), docUid)
    FROM dbo.Document
    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')

SELECT @docIds, LEN(@docIds)