Копирование значений BLOB между базами данных с использованием чистого SQL в SQL Server

StackOverflow https://stackoverflow.com/questions/271979

Вопрос

Мне нужно извлечь некоторые BLOB-данные из базы данных SQL Server 2005 и сгенерировать сценарий SQL для вставки этих же данных в другую базу данных, на другой сервер.

Мне разрешено делать это только с помощью сценариев SQL, я не могу использовать любую другую утилиту или написать программу на Java или .NET для этого.

Другое большое ограничение, которое у меня есть, заключается в том, что у меня нет доступа к исходной базе данных (где находятся исходные данные BLOB), когда я запускаю сценарий, чтобы скопировать данные BLOB в целевую базу данных, поэтому данные уже должны быть закодирован в файле сценария SQL.

Подводя итог: есть ли способ кодировать данные BLOB в текст, чтобы я мог вывести их в команду SQL INSERT в текстовом файле сценария и запустить?

Я могу запускать специальные операторы T-SQL и хранимые процедуры, если это необходимо.

Это было полезно?

Решение

TEXTCOPY - это пример приложения, включенного в SQL Server 7.0 и 2000, но больше не доступного в SQL Server 2005.

Однако, прибегая к поиску TEXTCOPY в SQL Server 2005, я нашел эту альтернативу, которая может помочь:

http://sequelserver.blogspot.com/2007 /01/texcopy-sql-server-2005.html

Он основан на записи и чтении двоичных данных из файловой системы, что в моем случае не идеально (в идеале я хотел бы кодировать двоичные данные с помощью самого текстового файла сценария SQL), но это лучшее, что я нашел пока.

Вот еще один хороший источник информации о том, как выполнять двоичные операции импорта / экспорта с помощью BULK OPENROWSET: http://msdn.microsoft.com/en-us/library/ms191184. ASPX

Другие советы

Эта статья " Копировать текст или изображение в или из SQL Server " может помочь:

Вы можете интегрировать инструмент командной строки TEXTCOPY в хранимую процедуру:

CREATE PROCEDURE sp_textcopy (
  @srvname     varchar (30),
  @login       varchar (30),
  @password    varchar (30),
  @dbname      varchar (30),
  @tbname      varchar (30),
  @colname     varchar (30),
  @filename    varchar (30),
  @whereclause varchar (40),
  @direction   char(1))

AS

DECLARE @exec_str varchar (255)
SELECT @exec_str =
         'textcopy /S ' + @srvname +
         ' /U ' + @login +
         ' /P ' + @password +
         ' /D ' + @dbname +
         ' /T ' + @tbname +
         ' /C ' + @colname +
         ' /W "' + @whereclause +
         '" /F ' + @filename +
         ' /' + @direction
EXEC master..xp_cmdshell @exec_str

Вам нужно будет немного изменить / расширить его, чтобы прочитать созданный файл в другую базу данных.

Как пишет Vinko в комментарии к этому ответу, имейте в виду, что для этого необходимо включить xp_cmdshell на поверхности Конфигурация области.

Описание ТЕКСТОПИИ:

Копирует одно значение текста или изображения в SQL Server или из него. Значение является указанным «столбцом» текста или изображения из одной строки (определяется " где условие ") указанной таблицы.

Если направление IN (/ I), то данные из указанного «файла» скопированы в SQL Server, заменяя существующее значение текста или изображения. Если Направление OUT (/ O), то значение текста или изображения копируется из SQL Server в указанный «файл», заменив любой существующий файл.

Взгляните на этот вопрос и найдите bcp на странице - приведен пример импорта и экспорта для varbinary (max) (который является новым стандартным типом для таких столбцов). Вы можете запустить произвольный запрос для экспорта.

Как вставить BLOB-объект в базу данных с использованием студии управления SQL Server

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top