Подтвердить что ты не робот

Усечение SQL Server и ограничение 8192

В SQL Server 2005 я пытаюсь запросить столбец varchar (MAX), который имеет несколько строк с текстовыми данными, которые превышают 8192. Тем не менее, в Management Studio у меня есть Инструменты → Параметры → Запрос Результаты → Результаты в текст → Максимальное количество символов, отображаемых в каждом столбце = 8192, что является максимальным. Соответственно, кажется, что усечение этих строк происходит только из-за ограничения, налагаемого текстовым выходом.

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

Я должен упомянуть, что SSIS и BCP не являются параметрами для меня.

Есть ли у кого-нибудь лучшее предложение? Спасибо!

4b9b3361

Ответ 1

Вы можете экспортировать данные в плоский файл, который не будет усечен. Для этого:

  • Щелкните правой кнопкой мыши базу данных
  • Нажмите "Задачи" → "Экспорт данных"
  • Выберите источник данных (значения по умолчанию должны быть точными)
  • Выберите "Flat File Destination" для типа Destination.
  • Выберите имя файла для вывода.
  • В поле "Укажите копию таблицы или запрос" выберите "Написать запрос, чтобы указать данные для передачи"
  • Вставить в запрос

Остальные шаги должны быть самоочевидными. Это выведет файл в текст, и вы сможете открыть его в своем любимом текстовом редакторе.

Ответ 2

Я также использую XML, но несколько другой метод, который затрагивает большинство проблем с поддержкой XML.

declare @VeryLongText nvarchar(max) = '';

SELECT top 100 @VeryLongText = @VeryLongText + '

' + OBJECT_DEFINITION(object_id) 
FROM sys.all_objects 
WHERE type='P' and is_ms_shipped=1

SELECT LEN(@VeryLongText)

SELECT @VeryLongText AS [processing-instruction(x)] FOR XML PATH('')

PRINT @VeryLongText /*WILL be truncated*/

Убедитесь, что предел "данных XML" в SSMS установлен достаточно высоким!

Screenshot

Ответ 3

Мое решение было немного кругом, но получило меня там (пока вывод меньше 65535 символов):

  • В SQL Management Studio установите предел для результатов сетки на 65535 (Инструменты > Параметры > Результаты запросa > SQL Server > Результаты для сетки > Не XML-данные)
  • Запуск запроса, вывод в сетку
  • Щелкните правой кнопкой мыши результаты, выберите "Сохранить результаты как..." и сохраните результаты в файле
  • Откройте файл в блокноте или аналогичный, чтобы получить вывод

UPDATE. Чтобы продемонстрировать, что это работает, вот какой-то SQL, который выбирает один столбец в 100 000 символов. Если я сохраню вывод сетки в файл csv, все 100 000 символов будут без усечения.

DECLARE @test nvarchar(MAX), @i int, @line nvarchar(100)
SET @test = ''; SET @i = 100
WHILE @i < 100000
BEGIN
    SET @test = @test + STUFF(REPLICATE('_', 98) + CHAR(13) + CHAR(10), 1, LEN(CAST(@i AS nvarchar)), CAST(@i AS nvarchar))
    SET @i = @i + 100
END
SELECT @test

Примечания:

  • Кажется, не имеет значения, какова настройка длины символа, как я сам думал.
  • Я использую SQL 2008 R2 (как сервер, так и Management Studio)
  • Кажется, не имеет значения, если длинный столбец хранится в локальной переменной (как в этом примере) или выбран из фактической таблицы

Ответ 4

Я столкнулся с этим, пытаясь экспортировать XML. Это решение, которое я использовал:

Выберите параметр "Результат для сетки", щелкните правой кнопкой мыши ссылку, отображаемую на панели "Результаты", затем выберите "Сохранить результаты как", выберите тип файла "Все файлы", укажите имя файла и нажмите "Сохранить". Все XML-данные сохраняются правильно в файле.

Я использую SSMS 10, и я не мог заставить Torre работать. Мастер экспорта постоянно думал, что входной столбец был изображением:

Тип данных для "входного столбца" XML_F52E2B61-18A1-11d1-B105-00805F49916B "(26)" - это DT_IMAGE

Ответ 5

Усечение, о котором вы говорите, происходит только в Management Studio. Если вы потянете столбец в другое приложение, оно не будет усечено.

Нельзя использовать Query Analyzer для общения с SQL Server 2005. Вы имеете в виду Management Studio?

Ответ 6

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

Ответ 7

Я обычно использую XML для получения огромной строки отладки в качестве вывода (используя тестовую ленту от Luke):

    declare @test nvarchar(max), @i int, @line nvarchar(100)
    set @test = ''; set @i = 100
    while @i < 100000
    begin
        set @test = @test + stuff(replicate('_', 98) + char(13) + char(10), 1, len(cast(@i as nvarchar)), cast(@i as nvarchar))
        set @i = @i + 100
    end
    -- ctrl+d for "results to grid" then click the xml output
    --select cast('<root>' + @test + '</root>' as xml)

-- revised
select @test for xml path(''), type;

Ответ 8

В SSMS, если вы выбираете данные из строки, оно ограничено небольшим количеством символов, но если вы редактируете данные из строки, то будет доступно полное значение. Это может быть не всегда, но если вы ctrl-a, ctrl-c, то мимо него в редакторе все будет там.

Ответ 9

Еще одно обходное решение, используйте HeidiSql для этих сложных запросов. Он не имеет границ в поле.

Ответ 10

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

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

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

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

Всего два клика прочь!