Pergunta

Eu preciso puxar alguns dados BLOB de um banco de dados SQL Server 2005 e gerar um script SQL para inserir estes mesmos dados em outro banco de dados, em outro servidor.

Eu só estou autorizado a fazer isso usando scripts SQL, eu não posso usar qualquer outro utilitário ou escrever um programa em Java ou .NET para fazê-lo.

A outra grande restrição que tenho é que eu não tenho acesso ao banco de dados original (onde os dados BLOB original está) quando eu executar o script, para copiar os dados BLOB ao banco de dados alvo, de modo que os dados já deve ser codificados dentro do arquivo script SQL.

Resumindo: existe uma maneira de codificar os dados BLOB em texto para que eu possa despejá-lo em um comando SQL INSERT dentro de um arquivo de texto de script e executá-lo

?

Eu sou capaz de executar instruções T-SQL especiais e procedimentos armazenados, se necessário.

Foi útil?

Solução

TEXTCOPY foi um aplicativo de exemplo incluído no SQL Server 7.0 e 2000, mas não está mais disponível no SQL Server 2005.

No entanto, pesquisando para TEXTCOPY no SQL Server 2005, achei que esta alternativa que pode fazer o truque:

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

Ele se baseia em escrever e ler os dados binários do sistema de arquivos, que no meu caso não é o ideal (o ideal é que eu gostaria de codificar os dados binários com o próprio arquivo de texto script SQL), mas é o melhor que eu encontrei até agora.

Aqui é outra boa fonte sobre como fazer operações binárias de importação / exportação usando BULK OPENROWSET: http://msdn.microsoft.com/en-us/library/ms191184. aspx

Outras dicas

Este artigo " Copiar texto ou imagem dentro ou fora do SQL Server " poderia ajudar:

Você poderia integrar a ferramenta de linha de comando TEXTCOPY em um procedimento armazenado:

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

Você vai ter que mudar / estendê-lo um pouco, a fim de ler o arquivo criado em outro banco de dados.

Como Vinko escreve no comentário a esta resposta, espera-se que esta exige permitindo xp_cmdshell na superfície área de configuração.

Descrição do TEXTCOPY:

Copia um único valor de texto ou uma imagem dentro ou fora do SQL Server. O valor que é um texto especificado ou a imagem 'coluna' de uma única linha (especificado pelo "Cláusula where") da 'mesa' especificado.

Se a direção é IN (/ I), em seguida, os dados do 'arquivo' especificado é copiado para SQL Server, substituindo o valor de texto ou imagem existente. Se o direção é OUT (E / S), então o valor de texto ou imagem é copiado de SQL Server para o 'arquivo' especificado, substituindo qualquer arquivo existente.

Dê uma olhada esta questão e procurar bcp na página - tem exemplo de importação e exportação para varbinary (max) (que é o novo tipo de padrão para tais colunas). você pode executar a consulta arbitrária para exportação.

Como inserir uma bolha em um banco de dados usando o estúdio de gerenciamento sql server

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top