Копирование большого поля (varbinary (max)) в файл/буфер обмена

У меня есть поле VARBINARY (MAX) в таблице базы данных, которая содержит ~ 35 тыс. символов. Это поле является преобразованным документом, который, к сожалению, больше не имеет доступа.

Это поле присутствует в моей базе данных dev, и я ищу перенос этого значения в базу данных в реальном времени. Однако, если я чисто выбираю содержимое из результатов сетки в SQL, я, кажется, получаю ~ 28 тыс. Доступных символов.

Итак, мой вопрос в том, что лучший способ перенести поле, содержимое которого слишком велико, чтобы просто скопировать и вставить и вставить script?

Любые мысли получили высокую оценку.

ИЗМЕНИТЬ:

Как дополнительная информация, вывод результатов в файл (хотя и в .txt), похоже, дает мне меньше символов, чем через сетку. Если я экспортирую результаты запроса в файл после запуска запроса в сетку, я, похоже, получаю буквальное представление того, что в окне запроса в то время (поэтому, если я растягиваю окно, я получаю больше символов, чем если бы я сжимал ширину столбца)/p >

Ответ 1

Чтобы надежно скопировать большие строки из панели результатов запроса SSMS, вы хотите обратить пристальное внимание на следующие настройки (сейчас я смотрю SSMS 10.50.2500.0):

Tools > Options > Query Results > SQL Server > Results to Grid
    Max chars retreived:
        Non-XML: 65535
        XML: Unlimited

Tools > Options > Query Results > SQL Server > Results to Text
    Max chars displayed:    
        8192

Вам может потребоваться хотя бы открыть новое окно запроса для применяемых параметров. Обратите внимание: поскольку XML неограничен, вы можете потенциально использовать XML для получения полных результатов. В этом случае вы можете сделать следующее:

select cast(convert(varchar(max), MyColumn, 1) as xml) -- Use style 1 to get "0x..."

Все, что сказано, могут быть лучше (и автоматизированы/воспроизводимые) методы для перемещения данных вокруг ваших систем, как упомянули другие:

  • Установите связанный сервер, чтобы просто запустить оператор insert
  • Используйте openrowset для запроса удаленного сервера.
  • SSMS: экспорт данных, создание сценариев, результатов в файл
  • SSIS
  • Сторонние инструменты (Redgate Data Compare и т.д.)

Ответ 2

Надстройка SSMSBoost для SSMS, которую я разрабатываю, имеет 2 функции, которые могут вам помочь:

  • Он может "визуализировать" документы, сохраненные в ячейках прямо из ResultsGrid. Таким образом, вы сможете увидеть свой документ в правильном виде из SSMS. Ссылка: http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers-feature

  • Он может копировать все байты из ячейки в буфер обмена. Вы можете вставить данные в некоторый "хороший" текстовый редактор и сохранить его как .doc. Но первое решение лучше, поскольку вы сразу получите текстовый документ: http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaks

Ответ 3

Вы можете просто экспортировать (Сохранить как) ваши результаты в csv.

1) Запустите запрос в SSMS
2) Результаты отображаются в формате сетки
3) Щелкните правой кнопкой мыши на сетке и выберите Сохранить результаты как
4) Выберите формат csv или текстового файла
5) Сохраните результаты в файл

Таким образом, будут экспортированы все данные, и оттуда вы можете выбрать весь текст, который вы хотите.

Примечание. Эти шаги были выполнены с использованием SSMS 2012, но должны быть одинаковыми или похожими для 2008 и других инструментов управления базами данных.

Ответ 4

Пропустить сетку
В результатах запроса SSMS в файл
Запустите запрос

Или почему вы не использовали связанный сервер для непосредственного вставки

Я тестировал и сохраняю в файл, обрезает.

Можете ли вы использовать .NET с DataReader и .GetBinary?