sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een INSERT-script genereren voor een tabel met een VARBINARY(MAX)-veld?

Als dit eenmalig (of zelden) is, kunt u proberen de gegevens uit de SSMS-wizard te scripten, zoals hier beschreven:

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

Of, als u dit vaak moet doen en het wilt automatiseren, kunt u de SQL# SQLCLR-bibliotheek (die ik heb geschreven en hoewel het meeste gratis is, is de functie die je hier nodig hebt dat niet). De functie om dit te doen is DB_DumpData en het genereert ook INSERT verklaringen.

Maar nogmaals, als dit een eenmalige of zeldzame taak is, probeer dan de wizard voor gegevensexport die in Management Studio is ingebouwd. Dat zou u in staat moeten stellen om vervolgens het SQL-script te maken dat u in Productie kunt uitvoeren. Ik heb dit zojuist getest op een tafel met een VARBINARY(MAX) veld met 3.365.964 bytes aan gegevens en de wizard Scripts genereren genereerde een INSERT statement met de hele hexadecimale tekenreeks van 6,73 miljoen tekens voor die ene waarde.

UPDATE:
Een andere snelle en gemakkelijke manier om dit te doen op een manier waarmee u de hele INSERT-instructie in een SQL-script kunt kopiëren/plakken en u zich niet bezig hoeft te houden met BCP of SSMS Export Wizard, is door de waarde gewoon te converteren naar
code>XML . Eerst zou je CONVERTEREN de VARBINARY naar VARCHAR(MAX) met behulp van de optionele stijl "1" die u een hexadecimale tekenreeks geeft die begint met "0x". Zodra u de hex-tekenreeks van de binaire gegevens hebt, kunt u die samenvoegen tot een INSERT statement en dat hele ding, wanneer geconverteerd naar XML , kan de volledige VARBINARY . bevatten veld. Zie het volgende voorbeeld:

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. SQL - is de volgorde van de OR-voorwaarden van belang?

  2. Als er gegevens bestaan, anders... Oracle SQL gebruiken?

  3. Django 3.x-fout:'mysql.connector.django' is geen beschikbare database-backend

  4. Hoe LENGTH() werkt in MariaDB