Как вы просматриваете ВЕСЬ текст из ntext или nvarchar (max) в SSMS?

193

Как вы просматриваете ВСЕ текст из NTEXT или NVARCHAR (максимум) в SQL Server Management Studio? По умолчанию кажется, что он возвращает только первые несколько сотен символов (255?), Но иногда мне просто нужен быстрый способ просмотра всего поля без необходимости написания программы для этого. Даже SSMS 2012 все еще имеет эту проблему :(

NickG
источник
1
возможный дубликат того, как получить полный набор результатов от SSMS
Мартин Смит

Ответы:

91

Параметры (Результаты запроса / SQL Server / Страница результатов в сетке)

Чтобы изменить параметры текущих запросов, нажмите «Параметры запроса» в меню «Запрос» или щелкните правой кнопкой мыши в окне «Запрос SQL Server» и выберите «Параметры запроса».

...

Максимальное количество извлеченных символов
Введите число от 1 до 65535, чтобы указать максимальное количество символов, которое будет отображаться в каждой ячейке.

Максимум, как видите, 64к. По умолчанию намного меньше.

Кстати, результаты для текста имеют еще более серьезные ограничения:

Максимальное количество символов, отображаемых в каждом столбце.
По умолчанию это значение равно 256. Увеличьте это значение, чтобы отображать большие наборы результатов без усечения. Максимальное значение 8192.

Ремус Русану
источник
1
Как Ремус написал в своем ответе, существуют ограничения, поскольку максимальный размер хранилища для типа данных в столбце, определенном с помощью MAX, составляет 2 ГБ, поэтому должны быть некоторые ограничения, потому что было бы неудобно отображать все эти данные в SSMS.
Иван Г
13
@IvanG - Не совсем. Он может быть просто связан с гиперссылкой так же, как и XML, и, щелкнув по нему, вы откроете его в новом окне. Обходной путь, который я обычно использую, заключается в преобразовании его в XML, как здесь . XML-данные могут быть настроены на неограниченную длину.
Мартин Смит
@MartinSmith Интересно, поэтому можно заставить SSMS отображать такой большой объем данных ...
Иван Г
11
Работает только в том случае, если количество символов <65535, что далеко от максимума ntext.
Polyfun
1
@IvanG даже «Результат в файл» страдает от этого ограничения.
Иэн
217

Мне удалось получить полный текст (99 208 символов) из столбца NVARCHAR (MAX), выбрав (Results To Grid) только этот столбец, затем щелкнув правой кнопкой мыши по нему и сохранив результат в виде файла CSV. Чтобы просмотреть результат, откройте файл CSV в текстовом редакторе (НЕ в Excel). Как ни странно, когда я пытался выполнить тот же запрос, но с включенными Результатами в файл, вывод был усечен с использованием ограничения Результатов в текст.

Обходной путь, который @MartinSmith описал как комментарий к (в настоящее время) принятому ответу, не сработал для меня (возникла ошибка при попытке просмотреть полный XML-результат с жалобой на "Символ '[", шестнадцатеричное значение 0x5B, не может быть включенным в имя ").

Эрик
источник
17
Щелкните правой кнопкой мыши, чтобы сохранить как, чтобы CSV работал для меня как чудо, чтобы получить огромное текстовое значение из поля NTEXT.
Дэвид Альперт,
3
@ajeh: какую версию SSMS 2012 вы используете? Я только что проверил это (выполняя те же самые шаги, которые я описал в своем ответе) с моей SSMS 2012 (версия 11.0.5343.0), и она работает
Эрик
8
Но не открывайте его в Excel, импорт CSV снова будет обрезать данные. :)
Johncl
1
Спасибо, это позволило мне экспортировать 7 МБ текстовых данных из поля varchar (max) с использованием SSMS 2012.
Брайан Хасден,
2
Сохранение текста с разделителями табуляции работает лучше. Формат CSV удваивает все кавычки в тексте.
Давидтегрей
140

Быстрый трюк

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
Андре Копс
источник
6
Это прекрасно работает (без части CDATA), когда содержимое столбца на самом деле XML
axk
2
Это также сработало для меня, у меня были данные JSON, которые мне нужно было получить из MS SQL.
Dev_Corps
1
Кроме того, содержимое не содержит XML. После того, как вы удалите текст, вы должны удалить его с помощью такого инструмента, как freeformatter.com.
harsimranb
Это сработало для меня: `` `ОБЪЯВЛЯЙТЕ @g географию; ... выберите Cast (@ g.ToString () как xml); `` `
Сергей Зиновьев
1
Это работало для меня с SSMS v18 для просмотра строки json размером 250 Кб, которая была обрезана другими решениями. Плюс мне это нравится, потому что он дает вам ссылку на просмотрщик текста. +!
Роберто
54

Я написал надстройку для SSMS, и эта проблема там исправлена. Вы можете использовать один из 2 способов:

Вы можете использовать «Копировать текущую ячейку 1: 1», чтобы скопировать исходные данные ячейки в буфер обмена:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksКопировать оригинальное содержимое ячейки

Или, в качестве альтернативы, вы можете открыть содержимое ячейки во внешнем текстовом редакторе (notepad ++ или notepad) с помощью функции «Визуализаторы ячеек»: http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers.

(Функция позволяет открывать содержимое поля в любом внешнем приложении, поэтому, если вы знаете, что это текст - вы используете текстовый редактор, чтобы открыть его. Если содержимое представляет собой двоичные данные с изображением - вы выбираете просмотр как рисунок. Пример ниже показывает открытие рисунка ):Визуализаторы сетки результатов SSMS

Андрей Ранцевич
источник
2
Выглядит как действительно полезное расширение, но я не могу принять его как ответ, так как для этого требуется коммерческий продукт (или пробная версия). Спасибо хоть!
2012 г.,
4
+1 Отличное бесплатное расширение, которое отлично работает ... Спасибо!
reSPAWNed
2
Спасибо, это именно то, что я хочу.
Дерек Дин
9
К сожалению, по состоянию на 4 сентября 2017 года SSMS Boost больше не является бесплатным (за исключением 30-дневной пробной версии для каждой выпущенной новой версии)
csrowell
4
Теперь это коммерческий продукт, бесплатная лицензия не распространяется ни на одну из упомянутых функций, они отключены, и вы получаете всплывающее окно для покупки PRO-версии. Ответ - просто продвижение его программного обеспечения.
metauddy
3

Возврат данных в виде XML

SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'

Убедитесь, что вы установили разумное ограничение в окне параметров SSMS, в зависимости от ожидаемого результата. введите описание изображения здесь

Это будет работать, если текст, который вы возвращаете, не содержит незашифрованные символы, такие как & вместо &amp;этого произойдет сбой преобразования XML.

Возврат данных с помощью PowerShell

Для этого вам понадобится модуль PowerShell SQL Server, установленный на компьютере, на котором вы будете запускать команду.

Если все настроено, настройте и запустите следующий скрипт:

Invoke-Sqlcmd -Query "SELECT [Data] FROM [dbo].[FormData] WHERE [UID] LIKE '{my-uid}'" -ServerInstance "database-server-name" -Database "database-name" -Username "user" -Password "password" -MaxCharLength 10000000 | Out-File -filePath "C:\db_data.txt"

Убедитесь, что для -MaxCharLengthпараметра установлено значение, соответствующее вашим потребностям.

dvlsc
источник
1

Альтернатива 1 : щелкните правой кнопкой мыши, чтобы скопировать ячейку и вставить в текстовый редактор (надеюсь, с поддержкой utf-8)

Альтернатива 2 : щелкните правой кнопкой мыши и экспортируйте в файл CSV

Альтернатива 3 : используйте функцию SUBSTRING для визуализации частей столбца. Пример:

SELECT SUBSTRING (fileXml, 2200,200) ИЗ mytable WHERE id = 123456

Дон Г.
источник
0

Если вам нужно только просмотреть его, я использовал это:

print cast(dbo.f_functiondeliveringbigformattedtext(seed) as text)

В результате я получаю переводы строки и весь контент в окне сообщений SMSS. Конечно, он допускает только одну ячейку - если вы хотите сделать одну ячейку из нескольких строк, вы можете сделать это:

declare @T varchar(max)=''
select @T=@T
       + isnull(dbo.f_functiondeliveringbigformattedtext(x.a),'NOTHINGFOUND!')
       + replicate(char(13),4)
from x -- table containing multiple rows and a value in column a
print @T

Я использую это для проверки строк JSON, сгенерированных кодом SQL. Слишком трудно читать иначе!

CDenby
источник
-1

Самый простой способ быстро просмотреть большой столбец varchar / text:

declare @t varchar(max)

select @t = long_column from table

print @t
Рафаэль Ленартович
источник
11
Но текст все еще урезан :-(
Rasmus