sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo generar un script INSERT para una tabla con un campo VARBINARY(MAX)?

Si esto es algo que se debe hacer una sola vez (o rara vez), puede intentar generar una secuencia de comandos de los datos desde el Asistente de SSMS como se describe aquí:

http:/ /sqlblog.com/blogs/eric_johnson/archive/2010/03/08/script-data-in-sql-server-2008.aspx

O bien, si necesita hacer esto con frecuencia y desea automatizarlo, puede probar SQL# Biblioteca SQLCLR (que escribí y aunque la mayor parte es gratuita, la función que necesita aquí no lo es). La función para hacer esto es DB_DumpData y también genera INSERT declaraciones.

Pero, de nuevo, si se trata de una tarea única o poco frecuente, pruebe el asistente de exportación de datos integrado en Management Studio. Eso debería permitirle crear el script SQL que puede ejecutar en producción. Acabo de probar esto en una tabla con un VARBINARY(MAX) que contiene 3 365 964 bytes de datos y el asistente Generar scripts generó un INSERT instrucción con la cadena hexadecimal completa de 6,73 millones de caracteres para ese valor.

ACTUALIZACIÓN:
Otra forma rápida y fácil de hacer esto de una manera que le permita copiar/pegar la declaración INSERT completa en un script SQL y no tener que molestarse con BCP o SSMS Export Wizard es simplemente convertir el valor a XML . Primero CONVERT el VARBINARY a VARCHAR(MAX) usando el estilo opcional de "1" que le da una cadena hexadecimal que comienza con "0x". Una vez que tenga la cadena hexadecimal de los datos binarios, puede concatenarla en un INSERT declaración y todo eso, cuando se convierte a XML , puede contener el VARBINARY completo campo. Vea el siguiente ejemplo:

DECLARE @Binary VARBINARY(MAX) = CONVERT(VARBINARY(MAX),
                                         REPLICATE(
                                           CONVERT(NVARCHAR(MAX), 'test string'),
                                           100000)
                                        )

SELECT 'INSERT INTO dbo.TableName (ColumnName) VALUES ('+
       CONVERT(VARCHAR(MAX), @Binary, 1) + ')' AS [Insert]
FOR XML RAW;