Pregunta

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

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 ya deberían estar codificado dentro del archivo de script SQL.

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

Puedo ejecutar sentencias T-SQL especiales y procedimientos almacenados si es necesario.

¿Fue útil?

Solución

TEXTCOPY era una aplicación de muestra incluida en SQL Server 7.0 y 2000 pero ya no estaba disponible en SQL Server 2005.

Sin embargo, buscando en Google TEXTCOPY en SQL Server 2005, encontré esta alternativa que podría funcionar:

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

Se basa en escribir y leer los datos binarios del sistema de archivos, lo que en mi caso no es ideal (idealmente me gustaría codificar los datos binarios con el archivo de texto del script SQL), pero es lo mejor que he encontrado hasta ahora.

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

Otros consejos

Este artículo " Copiar texto o imagen dentro o fuera de SQL Server " podría ayudar:

Puede 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

Tendrá que cambiarlo / extenderlo un poco para leer el archivo creado en la otra base de datos.

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

Descripción de TEXTCOPY:

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

Si la dirección es IN (/ I), los datos del 'archivo' especificado son copiado en SQL Server, reemplazando el texto existente o el valor de la imagen. Si el la dirección es OUT (/ O), entonces el texto o el valor de la imagen se copia de SQL Server en el 'archivo' especificado, reemplazando cualquier archivo existente.

Eche un vistazo a esta pregunta y busque bcp en la página; tiene ejemplos de importación y exportación para varbinary (max) (que es el nuevo tipo estándar para tales columnas). puede ejecutar consultas arbitrarias para exportación.

Cómo insertar un blob en una base de datos usando sql server management studio

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top