Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wygenerować skrypt INSERT dla tabeli z polem VARBINARY(MAX)?

Jeśli jest to jednorazowa (lub rzadko) rzecz do zrobienia, możesz spróbować wypisać dane z kreatora SSMS, jak opisano tutaj:

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

Lub, jeśli musisz robić to często i chcesz to zautomatyzować, możesz wypróbować SQL# Biblioteka SQLCLR (którą napisałem i chociaż większość z nich jest darmowa, funkcja, której tutaj potrzebujesz, nie jest). Służy do tego funkcja DB_DumpData a także generuje INSERT oświadczenia.

Ale znowu, jeśli jest to jednorazowe lub rzadkie zadanie, wypróbuj kreatora eksportu danych wbudowanego w Management Studio. Powinno to pozwolić na utworzenie skryptu SQL, który można uruchomić w środowisku produkcyjnym. Właśnie przetestowałem to na stole z VARBINARY(MAX) pole zawierające 3 365 964 bajty danych, a kreator Generuj skrypty wygenerował INSERT oświadczenie z całym ciągiem szesnastkowym składającym się z 6,73 miliona znaków dla tej jednej wartości.

AKTUALIZACJA:
Innym szybkim i łatwym sposobem na zrobienie tego w sposób, który umożliwiłby skopiowanie / wklejenie całej instrukcji INSERT do skryptu SQL bez konieczności zawracania sobie głowy kreatorem eksportu BCP lub SSMS, jest po prostu przekonwertowanie wartości na XML . Najpierw CONVERT VARBINARY do VARCHAR(MAX) używając opcjonalnego stylu „1”, który daje ciąg szesnastkowy zaczynający się od „0x”. Gdy masz już ciąg szesnastkowy danych binarnych, możesz połączyć go w INSERT oświadczenie i to wszystko, po przekonwertowaniu na XML , może zawierać całe VARBINARY pole. Zobacz następujący przykład:

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. Najlepsze opcje monitorowania bazy danych dostępne dla Twojej firmy

  2. określenie zestawu znaków tabeli/bazy danych?

  3. Problem z liczeniem elementów w T-SQL

  4. Jak TRY_CAST() działa w SQL Server

  5. Dziwaczny problem z wydajnością:typowe wyrażenia tabelowe w wbudowanej funkcji zdefiniowanej przez użytkownika