Як ви переглядаєте ВСІ тексти з ntext або nvarchar (max) у SSMS?


193

Як ви переглядаєте ВСІ тексти з NTEXT або NVARCHAR (max) в студії управління SQL Server? За замовчуванням він, здається, повертає перші кілька сотень символів (255?), Але іноді мені просто потрібно швидкий спосіб перегляду всього поля, не потребуючи написання програми, щоб це зробити. Навіть у SSMS 2012 існує проблема :(


Відповіді:


91

Параметри (Результати запитів / SQL Server / Результати на Grid Page)

Щоб змінити параметри поточних запитів, натисніть Параметри запиту в меню Запит або клацніть правою кнопкою миші у вікні запиту SQL Server та виберіть Параметри запиту.

...

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

Максимум - як бачите, 64 к. За замовчуванням набагато менше.

BTW Результати до тексту мають ще більш різке обмеження:

Максимальна кількість символів, відображених у кожному стовпці.
Це значення за замовчуванням до 256. Збільшити це значення, щоб відобразити великі набори результатів без укорочення. Максимальне значення - 8,192.


1
Як писав Ремус у своїй відповіді, існують обмеження, оскільки максимальний розмір пам’яті для типу даних у стовпці, визначеному з MAX, становить 2 Гб, тому має бути деяке обмеження, оскільки було б громіздко відображати всі ці дані в SSMS.
Іван Г

13
@IvanG - Не дуже. Це може бути гіперпосилання так само, як XML, і натискання на нього відкриє його в новому вікні. Робота навколо, яку я зазвичай використовую, - це передати її XML як тут . Дані XML можна встановити таким чином, щоб дозволити необмежену довжину.
Мартін Сміт

@MartinSmith Цікаво, тому можна змусити SSMS відображати такий великий об'єм даних ...
Іван Г

11
Працює лише в тому випадку, якщо кількість символів <65535, що набагато менше максимуму ntext.
Поліфун

1
@IvanG навіть "Результат до файлу" страждає від цього обмеження.
Iain

217

Мені вдалося вивести повний текст (99,208 символів) із стовпця NVARCHAR (MAX), вибравши (Результати до сітки) саме цей стовпець, а потім клацнувши на ньому правою кнопкою миші, а потім збереживши результат у файлі CSV. Для перегляду результату відкрийте файл CSV за допомогою текстового редактора (NOT Excel). Досить смішно, коли я намагався запустити той самий запит, але з увімкненими результатами "Файл до файлу" результат був усічений за допомогою межі "Результати до тексту".

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


17
Клацніть правою кнопкою миші, збережіть як, щоб CSV працював на мене як шарм, щоб отримати величезне значення тексту з поля NTEXT.
Девід Алперт

3
@ajeh: яку версію SSMS 2012 ви використовуєте? Я щойно перевірив це (дотримуючись тих же кроків, які я описав у своїй відповіді) з моїм SSMS 2012 (версія 11.0.5343.0), і він працює
Ерік

8
Але не відкривайте його в Excel, імпорт CSV знову вріже дані. :)
Джонкл

1
Дякую, це дозволило мені експортувати 7 Мб текстових даних із поля varchar (max) за допомогою SSMS 2012.
Брайан Хасден,

2
Збереження тексту з обмеженими вкладками працює краще. Формат csv подвоює всі лапки в тексті.
davidthegrey

140

Швидкий трюк-

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629

6
Це прекрасно працює (без частини CDATA), коли вміст стовпця насправді XML
axk

2
Це працювало і для мене, у мене були дані json, які мені потрібно було вийти з мс sql.
Dev_Corps

1
Крім того, вміст відхилено XML. Після того, як ви виймете текст, вам слід його не скасувати за допомогою такого інструменту, як freeformatter.com.
harsimranb

Це працювало для мене: `` DECLARE @g geography; ... виберіть Cast (@ g.ToString () як xml); `` `
Сергій Зіновієв

1
Це працювало для мене з SSMS v18 для перегляду рядка json 250kb, який був усічений іншими рішеннями. Плюс мені це подобається, оскільки він дає вам посилання на переглядач тексту. +!
Роберто

54

Я написав надбудову для SSMS, і ця проблема там вирішена. Можна скористатися одним із двох способів:

ви можете використовувати "Скопіювати поточну комірку 1: 1", щоб скопіювати вихідні дані комірки в буфер обміну:

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

Або ж ви можете відкрити вміст комірок у зовнішньому текстовому редакторі (блокнот ++ або блокнот) за допомогою функції "Візуалізатори стільникових елементів": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(Ця функція дозволяє відкривати вміст поля в будь-якій зовнішній програмі, тому якщо ви знаєте, що це текст - ви використовуєте текстовий редактор, щоб відкрити його. Якщо вміст є двійковими даними із зображенням - ви вибираєте перегляд як зображення. Зразок нижче показує відкриття малюнка ):SSMS Результати сіткові візуалізатори


2
Схоже, це дійсно корисне розширення, але я не можу прийняти це як відповідь, оскільки для нього потрібен комерційний продукт (або пробна версія). Дякую, хоча!
NickG

4
+1 Приємне безкоштовне розширення, яке чудово працює ... Дякую!
reSPAWNed

2
Дякую, це робить саме те, що я хочу.
Деррек Дін

9
На жаль, станом на 4 вересня 2017 року, SSMS Boost вже не безкоштовний (за винятком 30-денного пробного
періоду

4
Зараз це комерційний продукт, безкоштовна ліцензія не охоплює жодної із згаданих функцій, вони відключені, і ви отримуєте спливаюче вікно для придбання PRO-версії. Відповідь - це лише просування його програмного забезпечення.
метабуд

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 параметра значення, яке відповідає вашим потребам.


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. Занадто важко читати інакше!


-1

Найпростіший спосіб швидкого перегляду великого стовпчика вархар / текст:

declare @t varchar(max)

select @t = long_column from table

print @t

11
Але текст досі врізаний :-(
Расмус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.