Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso gerar um script INSERT para uma tabela com um campo VARBINARY(MAX)?


Se isso for feito uma vez (ou raramente), você pode tentar fazer o script dos dados do SSMS Wizard conforme descrito aqui:

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

Ou, se você precisar fazer isso com frequência e quiser automatizar, tente o SQL# Biblioteca SQLCLR (que eu escrevi e embora a maior parte seja gratuita, a função que você precisa aqui não é). A função para fazer isso é DB_DumpData e também gera INSERT declarações.

Mas, novamente, se esta for uma tarefa única ou rara, tente o assistente de exportação de dados integrado ao Management Studio. Isso deve permitir que você crie o script SQL que pode ser executado em Produção. Acabei de testar isso em uma tabela com um VARBINARY(MAX) campo contendo 3.365.964 bytes de dados e o assistente de geração de scripts gerou um INSERT instrução com toda a string hexadecimal de 6,73 milhões de caracteres para esse valor.

ATUALIZAÇÃO:
Outra maneira rápida e fácil de fazer isso de uma maneira que permita copiar/colar a instrução INSERT inteira em um script SQL e não precisar se preocupar com o Assistente de Exportação BCP ou SSMS é apenas converter o valor para XML . Primeiro você CONVERT o VARBINARY para VARCHAR(MAX) usando o estilo opcional de "1", que fornece uma string hexadecimal começando com "0x". Uma vez que você tenha a string hexadecimal dos dados binários, você pode concatená-la em um INSERT declaração e tudo isso, quando convertido para XML , pode conter todo o VARBINARY campo. Veja o seguinte exemplo:
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;