Sql*_*Guy 5 t-sql sql-server for-xml-path azure-synapse
我在使用数据透视表进行的一项调查中提出了很多问题。要动态收集我的数据透视表的所有问题,我使用stuff和for 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)
这是因为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)