Как просмотреть полный контент столбца 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 <
в <
и т.д. Или сбоев из-за этих символов, приведен ниже (здесь Адам Маханич).
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 клика!
В окне запроса
- установите для параметров запроса значение "Результаты в сетку", выполните запрос
- Щелкните правой кнопкой мыши вкладку результатов в углу сетки, сохраните результаты в виде любых файлов
Вы получите весь текст, который хотите увидеть в файле !!! Я вижу 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)),'<','<')
(Мне нужно было наложить на 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, '&', '&'), '<', '<') 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