Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich ein INSERT-Skript für eine Tabelle mit einem VARBINARY(MAX)-Feld generieren?

Wenn dies ein einmaliger (oder seltener) Vorgang ist, können Sie versuchen, die Daten wie hier beschrieben aus dem SSMS-Assistenten zu skripten:

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

Wenn Sie dies häufig tun müssen und es automatisieren möchten, können Sie auch SQL# SQLCLR-Bibliothek (die ich geschrieben habe und die meisten davon kostenlos sind, die Funktion, die Sie hier benötigen, ist es nicht). Die Funktion dafür ist DB_DumpData und es generiert auch INSERT Aussagen.

Wenn dies jedoch eine einmalige oder seltene Aufgabe ist, probieren Sie den in Management Studio integrierten Datenexport-Assistenten aus. Das sollte es Ihnen ermöglichen, das SQL-Skript zu erstellen, das Sie in der Produktion ausführen können. Ich habe das gerade an einer Tabelle mit einem VARBINARY(MAX) getestet Feld mit 3.365.964 Byte Daten und der Assistent zum Generieren von Skripts generierte ein INSERT Anweisung mit dem gesamten Hex-String von 6,73 Millionen Zeichen für diesen einen Wert.

AKTUALISIERUNG:
Eine weitere schnelle und einfache Methode, die es Ihnen ermöglicht, die gesamte INSERT-Anweisung in ein SQL-Skript zu kopieren/einzufügen, ohne sich mit BCP oder dem SSMS-Exportassistenten herumschlagen zu müssen, besteht darin, den Wert einfach in XML . Zuerst würden Sie KONVERTIEREN die VARBINARY zu VARCHAR(MAX) Verwenden Sie den optionalen Stil "1", der Ihnen eine Hex-Zeichenfolge gibt, die mit "0x" beginnt. Sobald Sie die Hex-Zeichenfolge der Binärdaten haben, können Sie diese zu einem INSERT verketten -Anweisung und das Ganze, wenn sie in XML konvertiert werden , kann die gesamte VARBINARY enthalten aufstellen. Siehe folgendes Beispiel:

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;