Как просмотреть полное содержимое столбца 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) исправить мои беды?
9 ответов:
один трюк, который может работать в довольно ограниченных обстоятельствах, просто называет столбец особым образом, как показано ниже.
DECLARE @S varchar(max) = 'A' SET @S = REPLICATE(@S,100000) + 'B' SELECT @S as [XML_F52E2B61-18A1-11d1-B105-00805F49916B]в SSMS 2012 и 2014 это отображает результаты, как показано ниже
щелчок по нему открывает полные результаты в средстве просмотра XML. Прокрутка вправо показывает, что последний символ B сохраняется,
однако это имеет некоторые серьезные проблемы. Добавление дополнительных столбцов в запрос разрывает эффект, и все дополнительные строки объединяются с первым. Наконец, если строка содержит символы, такие как
<открытие средства просмотра XML завершается ошибкой синтаксического анализа.более надежный способ сделать это, что позволяет избежать проблем преобразования SQL Server
<до<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;
вы пробовали это простое решение? Всего в 2 клика!
в окне запроса
- установите параметры запроса в "результаты в сетку", Запустите свой запрос
- щелкните правой кнопкой мыши на вкладке Результаты в углу сетки, сохраните результаты как любые файлы
вы получите весь текст, который вы хотите видеть в файле!!! Я вижу 130,556 символов для моего результата поля varchar (MAX)
самый простой обходной путь, который я нашел, - это резервное копирование таблицы и просмотр сценария. Чтобы сделать это
- щелкните правой кнопкой мыши базу данных и выберите
Tasks>Generate Scripts...- страница" введение " нажмите
Next- страница "выбор объектов"
- выбрать
Select specific database objectsи выберите таблица.- клик
Next- страница "Настройка параметров сценариев"
- Установите тип вывода в
Save scripts to a specific location- выберите
Save to fileи заполните соответствующие параметры- выберите
- Set
General>Types of data to scriptдоData onlyилиSchema and Dataи нажмите кнопку OK- клик
Next- "страница резюме" нажмите кнопку Далее
- ваш сценарий 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)),'<','<')(мне нужно было привести к 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, '&', '&'), '<', '<') AS XML) Details FROM Events e WHERE 1=1 AND e.EventID BETWEEN 13920 AND 13930 ;



Comments