Как я просматриваю полное содержание текста или varchar (МАКС) столбец в Studio управления SQL Server 2008 года?

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

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

Я читал на различных местоположениях в Интернете, в котором можно установить Максимальные Символы, Полученные для Данных XML Tools > Options > Query Results > SQL Server > Results To Grid к Неограниченному, и затем выполняют запрос, такой как это:

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

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

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

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

Одно решение состоит в том, чтобы увеличить число символов, полученных с сервера для данных XML. Для изменения этих настроек, в меню Tools, нажимают Options.

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

84
задан adamjford 3 May 2010 в 17:29
поделиться

4 ответа

SSMS разрешает неограниченное количество данных только для данных XML. Это не значение по умолчанию, и его необходимо установить в параметрах.

enter image description here

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

DECLARE @S varchar(max) = 'A'

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

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

В SSMS (по крайней мере, версии с 2012 по текущая версия 18.3) отображаются результаты, как показано ниже.

enter image description here

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

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

Более надежный способ сделать это, позволяющий избежать проблем, связанных с преобразованием SQL Server < в < и т. Д. Или отказом из-за этих символов, приведен ниже ( кредит Adam Machanic здесь ).

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('')
89
ответ дан 24 November 2019 в 08:34
поделиться

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

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

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

0
ответ дан 24 November 2019 в 08:34
поделиться

Тип данных TEXT устарел и больше не должен использоваться, это боль при выборе данных из ТЕКСТОВОГО столбца.

ntext, text и image (Transact-SQL)

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

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

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

3
ответ дан 24 November 2019 в 08:34
поделиться

Похоже, 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

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

РЕДАКТИРОВАТЬ

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

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

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

2
ответ дан 24 November 2019 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: