【问题标题】:Nvarchar(max) shrinks to 4000 chars in SQL ServerNvarchar(max) 在 SQL Server 中缩小到 4000 个字符
【发布时间】:2016-09-24 11:27:42
【问题描述】:

我正在存储过程中创建一个动态查询,当我尝试打印该动态查询时,它只打印整个查询的一部分。

保存整个动态查询的变量声明如下

DECLARE @SQL NVARCHAR(MAX)

当我像下面这样打印变量的长度时,它给出了整个查询的长度,这很好。

PRINT LEN(@SQL)

但是,当我打印脚本本身时,它只打印整个查询的一部分。

PRINT @SQL

我也尝试像下面这样打印它

PRINT CONVERT(NVARCHAR(MAX),@SQL)

为什么它只打印前 4000 个字符?我究竟做错了什么?

【问题讨论】:

  • 为什么不阅读文档? msdn.microsoft.com/en-us/library/ms176047.aspx 消息字符串如果是非 Unicode 字符串,最长可达 8,000 个字符,如果是 Unicode 字符串,最长可达 4,000 个字符。较长的字符串被截断。 varchar(max) 和 nvarchar(max) 数据类型被截断为不大于 varchar(8000) 和 nvarchar(4000) 的数据类型。
  • @VladimirBaranov,但我的字符串大约 15.000 个字符,
  • 您的数据没有被缩小/截断。 SSMS 对某些字段显示的字符数有限制。使用另一个应用程序来解释 SELECT 查询结果将产生该字段的完整值。
  • Why it only prints first 4000chars? 因为PRINT是这样工作的,文档里写得很清楚。

标签: sql sql-server


【解决方案1】:

你没有做错任何事。打印命令仅限于输出 4000 个字符(有关详细信息,请参阅 BOL - 联机丛书)。这并不意味着 nvarchar(max) 缩小到 4000 个字符。

【讨论】:

    【解决方案2】:

    尝试如下打印整个字符串,

    SET @Query = 'SELECT ....' [Up To 4,000 characters, then rest of statement as below]
    
    SET @Query = @Query + [rest of statement]
    
    Now run your query as normal i.e. EXEC ( @Query )
    

    从下面的链接得到答案

    nvarchar(max) still being truncated

    【讨论】:

      【解决方案3】:

      限制为 4000 个字符的是 PRINT,而不是 NVARCHAR(MAX) 变量。

      如果您想输出所有内容,解决方法就是使用类似 PRINT BIG 函数的字符串。

      https://www.richardswinbank.net/doku.php?id=tsql:print_big

      您也可以只选择不受限制的变量并从结果中复制内容。

      【讨论】:

        猜你喜欢
        • 2019-05-08
        • 1970-01-01
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多