我在用于数据透视表的调查中有很多问题。使用 stuff
将所有问题动态收集到我的数据透视表中和 for xml path
.但是,似乎没有显示长度 > 130 的问题文本。
我可以从我的 cte Questions
中选择所有列,所以我知道数据在那里。
UPDATE: If I select my output, my total length is around 8.000 could it be something about the nvarchar(max) not storing more than 8.000 even though it should be able to store around 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))
最佳答案
这是因为 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))
关于sql-server - 超过 130 的字符长度不显示在列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605435/