Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да генерирам INSERT скрипт за таблица с поле VARBINARY(MAX)?

Ако това е еднократно (или рядко) нещо, което трябва да направите, можете да опитате да изведете чрез скрипт данните от съветника за 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предоставяне Изберете на изглед, а не на основна таблица, когато основната таблица е в друга база данни

  2. Генериране на sql код програмно

  3. Предаване на променлива в клауза IN в рамките на SQL функция?

  4. Проверете дали стойността на колоната съществува в друга колона в SQL

  5. Преобразувайте цяло число в шестнадесетично и шестнадесетично в цяло число