Как получить содержимое огромного поля в SQL Server? - PullRequest
2 голосов
/ 05 июля 2011

Я закончил SQL Server 2008, и у меня есть поле с огромным количеством данных. Когда я подаю заявку ...

DATALENGTH(field_name)

... Я узнаю, что мое поле имеет длину 288,946 символов, но в MS SQL Server Management Studio, когда я пытаюсь скопировать и вставить результат простого SELECT этого поля в текстовый редактор (Блокнот +), оно Похоже, что SQL Server упаковывает только 43,679 символов ... Или это то, что буфер для копирования текста в Windows дует максимальное количество символов? Я уже проверял, и ограничение не для Notepad + размер строки или что-то ... Если я копирую и вставляю в новое окно запроса в SQL Server, результатом будет та же самая текстовая строка, ограниченная 43.679 символами.

Ну, вопрос: мне нужно скопировать и вставить все содержимое этого поля ... Есть ли что-то особенное, что я должен сделать в своем запросе? Спасибо.

Ответы [ 3 ]

4 голосов
/ 05 июля 2011

Я подал ошибку против этого во время бета-тестирования SQL Server 2008. Они закрыли его как «исправленный», но затем прокомментировали, что это было дубликатом проблемы Vista. Что меня удивило, потому что оно встречается и в нескольких других комбинациях SSMS / операционной системы, включая Denali CTP1 в Windows 7.

http://connect.microsoft.com/SQLServer/feedback/details/344150/ssms-grid-will-not-display-43-679-characters-from-varchar-max

Итак, я не уверен, почему они назвали это исправленным, потому что это, безусловно, все еще реальное ограничение.

Если у вас <64 КБ, вы можете конвертировать в XML, а затем нажать на результат в режиме сетки. К сожалению, притом, что вы довольно ограничены тем, что SSMS сможет получить для вас. Вам нужно будет экспортировать в плоский файл, как предлагали другие, использовать другую программу для полного извлечения данных или вручную вставить куски по 40000 символов. В вашем примере вы можете сделать что-то вроде этого: </p>

DECLARE @foo TABLE (a VARCHAR(MAX));

INSERT @foo(a) SELECT REPLICATE('A', 8000);

DECLARE @i INT = 1;

WHILE @i < 36
BEGIN
    UPDATE @foo SET a += REPLICATE(CHAR(@i+64), 8000);
    SET @i += 1;
END

SELECT DATALENGTH(a), a FROM @foo;

SELECT SUBSTRING(a, 1, 40000),
    SUBSTRING(a, 40001, 40000),
    SUBSTRING(a, 80001, 40000),
    SUBSTRING(a, 120001, 40000),
    SUBSTRING(a, 160001, 40000),
    SUBSTRING(a, 200001, 40000),
    SUBSTRING(a, 240001, 40000),
    SUBSTRING(a, 280001, 40000)
FROM @foo;

Но вам нужно будет настроить, добавив больше операций для столбцов со значениями> 320K.

1 голос
/ 05 февраля 2014

Как показано здесь вы можете установить плагин SSMSBoost для копирования текста

0 голосов
/ 07 января 2015

Если вы добавите FOR XML AUTO в свой запрос и запустите его с результатами в Grid, вы получите XML-результат, который включает все содержимое поля TEXT.

например.

SELECT large_field FROM MyTable --Limited to 65535 characters in Grid
SELECT large_field FROM MyTable FOR XML AUTO --Limited to 2G characters in Grid in XML format

Затем вы можете скопировать содержимое из окна редактора XML в SSMS и отделить XML от результатов, которые вас интересуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...