Как просмотреть полный контент столбца text или varchar (MAX) в SQL Server 2008 Management Studio?

В этой базе данных SQL Server 2008 (build 10.0.1600) есть таблица Events, которая содержит столбец text с именем Details. (Да, я понимаю, что это должен быть столбец varchar(MAX), но тот, кто установил эту базу данных, не сделал этого таким образом.)

Этот столбец содержит очень большие журналы исключений и связанных данных JSON, к которым я пытаюсь получить доступ через SQL Server Management Studio, но всякий раз, когда я копирую результаты из сетки в текстовый редактор, он обрезает ее с 43679 символами.

Я читал в разных местах в Интернете, что вы можете установить максимальные символы, полученные для XML-данных, в Tools > Options > Query Results > SQL Server > Results To Grid до Unlimited, а затем выполнить такой запрос:

select Convert(xml, Details) from Events
where EventID = 13920

(Обратите внимание, что данные - это столбец вообще не XML. CONVERT Столбец в XML - это всего лишь обходной путь, который я нашел из Googling, который кто-то использовал, чтобы обойти ограничение SSMS от извлечения данных из text или varchar(MAX).)

Однако, установив опцию выше, запустив запрос и нажав на ссылку в результате, я все равно получаю следующую ошибку:

Невозможно показать XML. Произошла следующая ошибка: Неожиданный конец файла произошел. Строка 5, позиция 220160.

Одним из решений является увеличение количества символов, полученных с сервера для данных XML. Чтобы изменить этот параметр, в меню "Сервис" выберите "Параметры".

Итак, какая-либо идея о том, как получить доступ к этим данным? Может ли преобразование столбца в varchar(MAX) исправить мои проблемы?

Ответ 1

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

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,100000) + 'B' 

SELECT @S as [XML_F52E2B61-18A1-11d1-B105-00805F49916B]

В SSMS 2012 и 2014 отображаются результаты, как показано ниже

enter image description here

Нажатие на него открывает все результаты в средстве просмотра XML. Прокрутка вправо показывает, что последний символ B сохранен,

Однако это имеет некоторые существенные проблемы. Добавление дополнительных столбцов к запросу нарушает эффект, и все дополнительные строки объединяются с первым. Наконец, если строка содержит такие символы, как <, открытие средства просмотра XML завершается неудачно с ошибкой синтаксического анализа.

Более надежный способ сделать это, чтобы избежать проблем с преобразованием SQL Server < в &lt; и т.д. Или сбоев из-за этих символов, приведен ниже (здесь Адам Маханич).

DECLARE @S varchar(max)

SELECT @S = ''

SELECT @S = @S + '
' + OBJECT_DEFINITION(OBJECT_ID) FROM SYS.PROCEDURES

SELECT @S AS [processing-instruction(x)] FOR XML PATH('')

Ответ 2

Я смог заставить это работать...

SELECT CAST('<![CDATA[' + LargeTextColumn + ']]>' AS XML) FROM TableName;

Ответ 3

Один рабочий процесс - щелкнуть правой кнопкой мыши по набору результатов и выбрать "Сохранить результаты как...". Это экспортирует его в CSV файл со всем содержимым столбца. Не идеально, но работал достаточно хорошо для меня.

Обходной путь

Ответ 4

Вы пробовали это простое решение? Всего 2 клика!

В окне запроса

  1. установите для параметров запроса значение "Результаты в сетку", выполните запрос
  2. Щелкните правой кнопкой мыши вкладку результатов в углу сетки, сохраните результаты в виде любых файлов

Вы получите весь текст, который хотите увидеть в файле !!! Я вижу 130 556 символов для моего результата поля varchar (MAX)

Results in a file

Ответ 5

Простейшим обходным решением, которое я нашел, является резервное копирование таблицы и просмотр script. Для этого

  • Щелкните правой кнопкой мыши свою базу данных и выберите Tasks > Generate Scripts...
  • Страница "Введение" нажмите Next
  • Страница "Выбрать объекты"
    • Выберите Select specific database objects и выберите свою таблицу.
    • Нажмите Next
  • "Настройка параметров сценариев"
    • Задайте тип вывода Save scripts to a specific location
    • Выберите Save to file и заполните соответствующие параметры.
    • Нажмите кнопку Advanced
    • Установите General > Types of data to script в Data only или Schema and Data и нажмите ok
    • Нажмите Next
  • "Сводная страница" нажмите "Далее"
  • Ваш sql script должен быть сгенерирован на основе параметров, установленных в 4.2. Откройте этот файл и просмотрите свои данные.

Ответ 6

Тип данных TEXT является старым и больше не должен использоваться, больно выбирать данные из столбца TEXT.

ntext, текст и изображение (Transact-SQL)

текстовые, текстовые и графические типы данных будут удалены в будущей версии Microsoft SQL Server. Избегать использования эти типы данных в новой разработке работать и планировать изменение приложений которые в настоящее время используют их. использование nvarchar (max), varchar (max) и varbinary (max).

вам нужно использовать TEXTPTR (Transact-SQL) для извлечения текстовых данных.

Также см. эту статью в Обработка текстового типа данных.

Ответ 7

Похоже, что Xml не может быть хорошо сформирован. Если это так, то вы не сможете использовать его как Xml и, учитывая это, вы ограничены тем, сколько текста вы можете вернуть в Management Studio. Однако вы можете разбить текст на более мелкие куски:

With Tally As
    (
        Select ROW_NUMBER() OVER ( ORDER BY s1.object_id ) - 1 As Num
        From sys.sysobjects As s1
            Cross Join sys.sysobjects As s2
    )
Select Substring(T1.textCol, T2.Num * 8000 + 1, 8000)
From Table As T1
    Cross Join Tally As T2
Where T2.Num <= Ceiling(Len(T1.textCol) / 8000)
Order By T2.Num

Затем вам нужно будет вручную объединить их снова.

ИЗМЕНИТЬ

Похоже, что в данных text есть некоторые символы, которые синтаксический анализатор Xml не нравится. Вы можете попробовать преобразовать эти значения в сущности, а затем попробовать трюк Convert(xml, data). Так что-то вроде:

Update Table
Set Data = Replace(Cast(Data As varchar(max)),'<','&lt;')

(Мне нужно было наложить на varchar (max), потому что функция replace не будет работать с столбцами text. Не должно быть причин, по которым вы не могли бы преобразовать эти столбцы text в varchar(max).)

Ответ 8

Вы, кажется, не повезло. Проблема не в проблеме уровня SQL, поскольку все остальные ответы, похоже, сосредоточены, а просто один из пользовательских интерфейсов. Management Studio не предназначена для общего доступа/общего доступа к данным. Это не ваш интерфейс, а ваша административная область, и у него серьезные ограничения обработки двоичных данных и больших тестовых данных - потому что люди, использующие его в указанном профиле использования, не будут сталкиваться с этой проблемой.

Представление больших текстовых данных просто не является запланированным использованием.

Ваш единственный выбор - это функция с табличной оценкой, которая принимает текст и сокращает его строки для каждой строки, поэтому Management Studio получает список строк, а не одну строку.

Ответ 9

Я предпочитаю этот простой XML-хак, который делает столбцы интерактивными в SSMS по принципу "по ячейкам". С помощью этого метода вы можете быстро просматривать свои данные в табличном представлении SSMS и нажимать на определенные ячейки, чтобы увидеть полную ценность, когда они интересны. Это идентично методу OPs, за исключением того, что он избегает ошибок XML.

SELECT
     e.EventID
    ,CAST(REPLACE(REPLACE(e.Details, '&', '&amp;'), '<', '&lt;') AS XML) Details
FROM Events e
WHERE 1=1
AND e.EventID BETWEEN 13920 AND 13930
;

Ответ 10

Начиная с SSMS 18.2, теперь вы можете просматривать до 2 миллионов символов в результатах сетки. Источник

Разрешить отображать больше данных (результат в текст) и сохранять в ячейках (Результат к сетке). SSMS теперь позволяет использовать до 2 миллионов символов для обоих.

Я подтвердил это с помощью приведенного ниже кода.

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,2000000) + 'B' 

SELECT @S as a