2008-11-07 31 views
5

Necesito extraer algunos datos BLOB de una base de datos SQL Server 2005 y generar un script SQL para insertar estos mismos datos en otra base de datos, en otro servidor.Copiar valores BLOB entre bases de datos con SQL puro en SQL Server

Solo se me permite hacer esto usando scripts SQL, no puedo usar ninguna otra utilidad o escribir un programa en Java o .NET para hacerlo.

La otra gran restricción que tengo es que no tengo acceso a la base de datos original (donde están los datos BLOB originales) cuando ejecuto el script, para copiar los datos BLOB a la base de datos de destino, por lo que los datos deberían ya está codificado dentro del archivo de script SQL.

En resumen: ¿hay alguna manera de codificar los datos BLOB en texto para que pueda volcarlo en un comando SQL INSERT dentro de un archivo de texto de script y ejecutarlo?

Soy capaz de ejecutar declaraciones T-SQL especiales y procedimientos almacenados si es necesario.

Respuesta

2

TEXTCOPY era una aplicación de ejemplo se incluye en SQL Server 7.0 y 2000, pero ya no está disponible en SQL Server 2005.

Sin embargo, buscando en Google para TEXTCOPY en SQL Server 2005, me encontré con esta alternativa que podría hacer el truco:

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

se basa en la escritura y la lectura de los datos binarios desde el sistema de archivos, que en mi caso no es lo ideal (idealmente me gustaría para codificar los datos binarios con el archivo de texto de comandos SQL en sí), pero es lo mejor que he encontrado hasta ahora.

Aquí hay otra buena fuente sobre cómo hacer las operaciones de importación/exportación binarios usando OPENROWSET GRANEL: http://msdn.microsoft.com/en-us/library/ms191184.aspx

1

este artículo "Copy Text or Image into or out of SQL Server" podría ayudar:

Usted podría integrar la herramienta de línea de comandos TEXTCOPY en un procedimiento almacenado:

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 

Vas a tener que cambiar/extenderla un poco con el fin de lea el archivo creado en la otra base de datos.

Como Vinko escribe en el comentario de esta respuesta, tenga en cuenta que esto requiere la habilitación de xp_cmdshell en la configuración del área de superficie.

Descripción de TEXTCOPY:

Copia un solo texto o imagen de valor dentro o fuera de SQL Server. El valor es una "columna" de texto o imagen especificada de una sola fila (especificada por "where clause") de la 'tabla' especificada.

Si la dirección está en (/ I) a continuación, los datos de la 'archivo' especificado es copian en SQL Server, reemplazando el valor de texto o imagen existente. Si la dirección está FUERA (/ O), entonces el texto o el valor de la imagen se copia de SQL Server en el 'archivo' especificado, reemplazando cualquier archivo existente.

+0

Esto requiere que permite xp_cmdshell en la configuración superficie –

+0

Gracias por su respuesta, pero no estoy seguro si tengo acceso a la textcopy * * utilidad. Una solución pura basada en SQL es realmente lo que estaba buscando. – Dema

Cuestiones relacionadas