В этой действующей базе данных SQL Server 2008 (сборка 10.0.1600) есть Events
таблица, которая содержит text
столбец с именем Details
. (Да, я понимаю, что на самом деле это должен быть 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. CONVERT
Преобразование столбца в XML - это просто обходной путь, который я нашел в Google, который кто-то использовал для обхода ограничения, которое SSMS имеет на получение данных из столбца text
или varchar(MAX)
.)
Однако после установки указанного выше параметра, выполнения запроса и щелчка по ссылке в результате я все равно получаю следующую ошибку:
Невозможно показать XML. Произошла следующая ошибка: Неожиданный конец файла. Строка 5, позиция 220160.
Одно из решений - увеличить количество символов, получаемых с сервера для данных XML. Чтобы изменить этот параметр, в меню «Сервис» щелкните «Параметры».
Итак, есть идеи, как получить доступ к этим данным? Помогло бы преобразование колонки varchar(MAX)
исправить мои проблемы?
источник
CDATA
может работать, но если ваши данные содержат управляющие символы, вам необходимо выполнить операцию замены. В моем случае я использовал разделитель единиц, код ASCII 31, в своих данных. Поскольку я использовал только этот один символ во многих местах, достаточно простогоREPLACE(details, char(31), '&x1f;')
. Если бы мне нужно было заменить неизвестные символы или большое количество разных символов, мне, возможно, пришлось бы найти другое решение.CDATA
было мое первое предложение. ПоследнийAS [processing-instruction(x)]
избегает этого.Я смог заставить это работать ...
SELECT CAST('<![CDATA[' + LargeTextColumn + ']]>' AS XML) FROM TableName;
источник
Один из способов - щелкнуть правой кнопкой мыши по набору результатов и выбрать «Сохранить результаты как ...». Это экспортирует его в файл CSV со всем содержимым столбца. Не идеально, но для меня сработало достаточно хорошо.
источник
Вы пробовали это простое решение? Всего 2 клика!
В окне запроса
Вы получите весь текст, который хотите видеть в файле !!! Я вижу 130 556 символов для моего результата в поле varchar (MAX)
источник
Самый простой обходной путь, который я нашел, - это создать резервную копию таблицы и просмотреть сценарий. Сделать это
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
и нажмите ОКNext
источник
Тип данных TEXT устарел и больше не должен использоваться, очень сложно выбирать данные из столбца TEXT.
ntext, текст и изображение (Transact-SQL)
вам необходимо использовать TEXTPTR (Transact-SQL) для получения текстовых данных.
Также см. Эту статью об обработке текстового типа данных .
источник
varchar(MAX)
препятствовать тому, чтобы SSMS усекал из него данные?Похоже, что 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)),'<','<')
(Мне нужно было
text
преобразовать в varchar (max), потому что функция замены не будет работать со столбцами. Не должно быть никаких причин, по которым вы не могли преобразовать этиtext
столбцы вvarchar(max)
.)источник
text
илиvarchar(MAX)
.TSQL
от @IanQuigley на основе этого ответа сработало для меня. Я в основном взял результаты (в итоге получилось 11 записей) и просто склеил их в Блокноте. Работает отлично. Необходимо сохранить этот скрипт. У меня был какой-то сумасшедший длинный XML, содержащий недопустимые символы.Я предпочитаю этот простой 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 ;
источник
NVARCHAR
/VARCHAR
. Например, символ NUL (отличный отNULL
значения поля). Приведение не будет выполнено для строк с такими встроенными значениями.Начиная с SSMS 18.2, вы можете просматривать до 2 миллионов символов в результатах сетки. Источник
Я проверил это с помощью кода ниже.
DECLARE @S varchar(max) = 'A' SET @S = REPLICATE(@S,2000000) + 'B' SELECT @S as a
источник
Думаю, тебе не повезло. Проблема не является проблемой уровня SQL, как кажется, все остальные ответы, а просто одним из пользовательских интерфейсов. Management Studio не предназначена для использования в качестве универсального интерфейса доступа к данным. Это не ваш интерфейс, а ваша административная область, и она имеет серьезные ограничения на обработку двоичных данных и больших тестовых данных - потому что люди, использующие его в указанном профиле использования, не столкнутся с этой проблемой.
Представление больших текстовых данных - это просто не запланированное использование.
Единственным выбором будет функция с табличным значением, которая принимает вводимый текст и вырезает из него строки для каждой строки, так что Management Studio получает список строк, а не одну строку.
источник