Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je générer un script INSERT pour une table avec un champ VARBINARY(MAX) ?

S'il s'agit d'une chose à faire une fois (ou rarement), vous pouvez essayer de scripter les données à partir de l'assistant SSMS comme décrit ici :

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

Ou, si vous devez le faire fréquemment et que vous souhaitez l'automatiser, vous pouvez essayer le SQL# Bibliothèque SQLCLR (que j'ai écrite et bien que la majeure partie soit gratuite, la fonction dont vous avez besoin ici ne l'est pas). La fonction pour ce faire est DB_DumpData et il génère également INSERT déclarations.

Mais encore une fois, s'il s'agit d'une tâche ponctuelle ou peu fréquente, essayez l'assistant d'exportation de données intégré à Management Studio. Cela devrait vous permettre de créer ensuite le script SQL que vous pouvez exécuter en production. Je viens de tester ceci sur une table avec un VARBINARY(MAX) champ contenant 3 365 964 octets de données et l'assistant Générer des scripts a généré un INSERT avec la chaîne hexadécimale complète de 6,73 millions de caractères pour cette valeur unique.

MISE À JOUR :
Un autre moyen simple et rapide de le faire d'une manière qui vous permettrait de copier/coller l'intégralité de l'instruction INSERT dans un script SQL et de ne pas avoir à vous soucier de BCP ou de l'assistant d'exportation SSMS consiste simplement à convertir la valeur en XML . Vous devez d'abord CONVERT le VARBINARY à VARCHAR(MAX) en utilisant le style facultatif "1" qui vous donne une chaîne hexadécimale commençant par "0x". Une fois que vous avez la chaîne hexadécimale des données binaires, vous pouvez la concaténer dans un INSERT déclaration et tout cela, une fois converti en XML , peut contenir le VARBINARY entier champ. Voir l'exemple suivant :

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;