超过 130 的字符长度不显示在列中

Sql*_*Guy 5 t-sql sql-server for-xml-path azure-synapse

我在使用数据透视表进行的一项调查中提出了很多问题。要动态收集我的数据透视表的所有问题,我使用stufffor xml path。然而,长度> 130 的问题文本似乎没有显示。

我可以从我的中选择所有列cte Questions,所以我知道数据在那里。

更新:如果我选择输出,我的总长度约为 8.000,这是否是因为 nvarchar(max) 不存储超过 8.000,即使它应该能够存储大约 2GB?

我究竟做错了什么?

SELECT QuestionList = cast(STUFF((
                SELECT ',' + QUOTENAME(cast(question AS NVARCHAR(max)))
                FROM questions
                ORDER BY [AgpdbQuestionID]
                FOR XML PATH('')
                ), 1, 1, '') AS NVARCHAR(max))
Run Code Online (Sandbox Code Playgroud)

Hon*_*ger 6

这是因为QUOTENAME,如果输入大于 128,则返回 NULL,因为它应该处理sysname,而不是(N)VARCHAR:“character_string 是 sysname 并且限制为 128 个字符。输入大于 128 个字符返回 NULL。”

相反尝试:

SELECT QuestionList = cast(STUFF((
                SELECT ',' + '[' + (cast(question AS NVARCHAR(max)) + ']')
                FROM (
                        VALUES (REPLICATE('a', 130)) 
                     )q(question)
                FOR XML PATH('')
                ), 1, 1, '') AS NVARCHAR(max))
Run Code Online (Sandbox Code Playgroud)