1

我正在尝试将大量记录 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。

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

4

1 回答 1

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)
于 2013-07-04T05:28:09.840 回答