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

标签 sql-server tsql for-xml-path azure-sql-data-warehouse

我在用于数据透视表的调查中有很多问题。使用 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/

相关文章:

c# - 使用 (var connection = new SqlConnection ("ConnectionString")) 是否仍然关闭/处理错误连接?

sql-server - 使用 T-SQL FOR XML PATH 删除空的 XML 节点

mysql - SQL Server 中的选择在 MySQL 中不起作用,Stuff 函数

sql-server - FOR XML PATH 总是为值添加尾随空格

sql-server - INSERT 语句运行正确但抛出 'violation of PK contstraint' 错误?

java - JDBC Insert with Prepared Statement 说我有 SQL 语法错误

entity-framework - EF5 迁移 - 删除约束时重复/重新定义的变量错误 |使用 SQL GO 命令的问题

sql - Linq lambda 表达式 (GROUP_CONCAT/STRING_AGG) 中 XML PATH 和 Stuff 的等价物是什么?

sql-server - 始终加密、LINQ 以及包含位置

java - 如何在java应用程序和数据库之间建立安全连接?