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



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



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



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



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


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



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




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



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




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

985   9  

9 ответов:

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

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; etc или сбой из-за этих символов ниже (кредит Адам Маханик здесь).

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('')

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

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

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

Workaround

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

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

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

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

Results in a file

самый простой обходной путь, который я нашел, - это резервное копирование таблицы и просмотр сценария. Чтобы сделать это

  1. щелкните правой кнопкой мыши базу данных и выберите Tasks>Generate Scripts...
  2. страница" введение " нажмите Next
  3. страница "выбор объектов"
    1. выбрать Select specific database objects и выберите таблица.
    2. клик Next
  4. страница "Настройка параметров сценариев"
    1. Установите тип вывода в Save scripts to a specific location
    2. выберите Save to file и заполните соответствующие параметры
    3. выберите
    4. Set General>Types of data to script до Data only или Schema and Data и нажмите кнопку OK
    5. клик Next
  5. "страница резюме" нажмите кнопку Далее
  6. ваш сценарий sql должен быть создан на основе параметров, заданных в 4.2. Откройте этот файл и просмотрите свои данные.

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

ntext, text и image (Transact-SQL)

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

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

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

похоже, что 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

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

EDIT

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

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

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

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

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

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

Я предпочитаю этот простой XML-хак, который делает столбцы кликабельными в SSMS по ячейкам. С помощью этого метода вы можете быстро просмотреть свои данные в табличном представлении SSMS и щелкнуть по определенным ячейкам, чтобы увидеть полное значение, когда они интересны. Это идентично методу OP, за исключением того, что он позволяет избежать ошибок 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
;

Comments

    Ничего не найдено.