nvarchar(max)的大小限制,打印问题

时间:2016-06-15 06:45:31

标签: sql sql-server nvarchar

我想保存长度超过43679个字符的XML记录并保存到表中。 因为当我检查它的长度时它给出超过43679个字符但是当我要阅读或打印此列的数据时它只显示43679个字符。

下图可以帮助您了解问题。

enter image description here

例如

declare @t table (a nvarchar(max));
insert into @t (a) values (REPLICATE(CONVERT(nvarchar(max),'a'),200000));
select LEN(a) from @t  -- result 200000
select print(a) from @t -- print only 43679 char.

请帮助我摆脱这种情况。

3 个答案:

答案 0 :(得分:1)

这是SSMS中的well known bug,您不能从网格视图列粘贴超过43679个字符,不幸的是这个限制无法增加。您可以通过以Xml格式显示数据来解决这个问题而不是nvarchar

答案 1 :(得分:0)

NCHAR,NVARCHAR,NVARCHAR(MAX)等数据类型存储了CHAR,VARCHAR和MAX的一半。 NVARCHAR(MAX)。因为这些数据类型用于存储UNICODE字符。当您需要存储除默认语言(排序规则)之外的数据时,请使用这些数据类型。 UNICODE字符为每个字符占用2个字节。这就是为什么NCHAR,NVARCHAR,NVARCHAR(MAX)的长度为CHAR,VARCHAR& NVARCHAR(MAX)。

答案 2 :(得分:0)

在打印到消息窗格时,SQL Server Management Studio具有字符限制。有一种解决方法可以实现您的需求。

使用FOR XML使用TYPE选择数据,您可以指定[processing-instruction]并为其命名。您的文字将显示为您可以打开的链接。此文本将包含您指定的包装器和名称。这是一个例子。

declare @t table (a nvarchar(max));
insert into @t (a) values (REPLICATE(CONVERT(nvarchar(max),'a'),200000));
select LEN(a) from @t  -- result 200000
SELECT a [processing-instruction(TextOutput)] from @t FOR XML PATH(''), TYPE;