2016-06-15 5 views
0

Я хочу сохранить запись XML, длина которой больше 43679 символов и сохраняется в таблице. Потому что, когда я проверяю его длину, он дает больше, чем 43679 char, но когда я собираюсь читать или печатать данные этого столбца, он показывает только 43679 char.Предел размера для nvarchar (макс.), Проблема с печатью

Данное изображение может помочь вам разобраться с проблемой.

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

NVARCHAR (макс) можно хранить до 2 GB.Could вы предоставить более подробную информацию о том, что вы пытаетесь сделать с примерами и тегов RDBMS – TheGameiswar

+2

Как и в сторону, почему вы храните XML как 'NVARCHAR (max) ', а не типа данных' xml'? Попробуйте создать [mcve] для этого - по крайней мере, минимальное определение таблицы и некоторые фиктивные данные для ее заполнения, чтобы продемонстрировать вашу проблему. –

+0

Я только что обновил свой вопрос. nvarchar (max) сохранено более 43679 символов, но когда я получаю это значение (печать). это только печатный 43679 символ. –

ответ

1

Это well known bug в SSMS. Вы не можете вставить больше чем 43679 символов из столбца сетки и, к сожалению, этот лимит не может быть увеличен, вы можете обойти это, показывая свои данные в формате Xml вместо nvarchar

0

Типы данных, такие как NCHAR, NVARCHAR, NVARCHAR (MAX) хранят половину CHAR, VARCHAR & NVARCHAR (MAX). Потому что этот тип данных используется для хранения символов UNICODE. Используйте эти типы данных, когда вам нужно хранить другие данные, кроме языка по умолчанию (Collation). Символы UNICODE принимают по 2 байта для каждого символа. Вот почему одна часть NCHAR, NVARCHAR, NVARCHAR (MAX) хранит половину CHAR, VARCHAR & NVARCHAR (MAX).

+0

он не превышает предел по умолчанию в этом случае – TheGameiswar

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;