Ако това е еднократно (или рядко) нещо, което трябва да направите, можете да опитате да изведете чрез скрипт данните от съветника за SSMS, както е описано тук:
http:/ /sqlblog.com/blogs/eric_johnson/archive/2010/03/08/script-data-in-sql-server-2008.aspx
Или, ако трябва да правите това често и искате да го автоматизирате, можете да опитате SQL# Библиотека SQLCLR (която написах и въпреки че по-голямата част от нея е безплатна, функцията, от която се нуждаете тук, не е). Функцията за това е DB_DumpData и също така генерира INSERT
изявления.
Но отново, ако това е еднократна или рядка задача, опитайте съветника за експортиране на данни, който е вграден в Management Studio. Това би трябвало да ви позволи след това да създадете SQL скрипта, който можете да стартирате в производството. Току-що тествах това на таблица с VARBINARY(MAX)
поле, съдържащо 3 365 964 байта данни и съветникът за генериране на скриптове генерира INSERT
израз с целия шестнадесетичен низ от 6,73 милиона знака за тази една стойност.
АКТУАЛИЗАЦИЯ:
Друг бърз и лесен начин да направите това по начин, който би ви позволил да копирате/поставите целия израз INSERT в SQL скрипт и да не се налага да се занимавате с BCP или съветника за експортиране на SSMS, е просто да конвертирате стойността в XML
. Първо трябва да CONVERT
VARBINARY
към VARCHAR(MAX)
използвайки незадължителния стил на "1", който ви дава шестнадесетичен низ, започващ с "0x". След като имате шестнадесетичния низ на двоичните данни, можете да го свържете в INSERT
израз и цялото това нещо, когато се преобразува в XML
, може да съдържа целия VARBINARY
поле. Вижте следния пример:
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;