2011-09-22 16 views
47

Ho bisogno di creare uno script INSERT per poter inserire in un altro database gli stessi dati.
Se in SQL Server seleziono "Tabella script come> INSERT A", posso facilmente ricreare lo scheletro per l'istruzione INSERT. Tuttavia, poiché ho diversi record da migrare, preferirei evitare di dover inserire i valori manualmente.Creare script INSERT SQL con i valori raccolti dalla tabella

Quindi c'è un modo per "automaticamente" ottenere lo script INSERT con anche i valori (provenienti dalla tabella di destinazione) compilati?

So che questo potrebbe essere fatto con SSIS, ma mi chiedo se sarebbe possibile anche con una soluzione più rapida.

risposta

94

È possibile farlo con SSMS.

1 - Fare clic con il pulsante destro del mouse in Esplora oggetti.
2 - Selezionare Compiti/generare script ...
3 - sul set opzioni di scripting pagina, fare clic sul pulsante Avanzate e assicurarsi Tipi di dati di script è impostato su dati solo .

Lo script risultante avrà un'istruzione USE DATABASE nella parte superiore. Cambia questo nel database in cui desideri inserire i dati.

+4

FYI è possibile disattivare il comando 'USE Database' in Strumenti/Opzioni/Esplora oggetti di SQL Server/Scripting/Opzioni di scripting generali/Script USE

+0

È inoltre necessario rimuovere manualmente le colonne di identità dal T-SQL generato se stai utilizzando l'output come modello per inserire nuovi record o imposta IDENTITY_INSERT su. –

6

Usare il liberaSSMS tools pack to "generate insert statements"?

O in SQL Server Management Studio (non hanno su questo PC per confermare) le procedure guidate di esportazione consente di "dati di script" troppo

+0

La procedura guidata di esportazione consente di esportare i dati, ma non l'istruzione con i dati. Ma +1 per lo strumento, sembra molto buono! – Francesco

+0

@Luca: lo strumento è essenziale! Controlla la risposta di RedFilter sulla procedura guidata SSMS. – gbn

+0

SSMS Tool Pack http://www.ssmstoolspack.com/ è fantastico! –

1

dipenderà i tipi di dati, perché è necessario racchiudere condizionale valori di stringa tra virgolette o lanciare i valori numerici come stringa S. È inoltre necessario per affrontare con i caratteri problematici:

SELECT 'INSERT INTO dbo.DestinationTable(col1, col2, col3) 
    SELECT ' + CONVERT(VARCHAR(12), col1) + ',' 
     + '''' + REPLACE(col2, '''', '''''') + ''',' 
     + '''' + REPLACE(col3, '''', '''''') + ''';' 
    FROM dbo.SourceTable; 

Vyas ha un pretty complex stored procedure per questo scopo.

Naturalmente si può fare questo molto più facile da solo dicendo:

INSERT INTO OtherDatabase.dbo.DestinationTable(col1, col2, col3) 
    SELECT col1, col2, col3 FROM dbo.SourceTable; 

In altre parole, non c'è bisogno di "script" un inserto, si può semplicemente eseguirlo ...

+0

Il secondo approccio sarebbe molto semplice, se solo non fosse su una intranet/server completamente diversa senza un accesso remoto :-( – Francesco

+0

@Luca, in tal caso esportare un file e portarlo con SSIS o la procedura guidata di esportazione di importazione: – HLGEM

+0

@HLGEM: la soluzione fornita da RedFilter è la risposta a ciò che stavo cercando, poiché è la più diretta, ma grazie per il suggerimento. – Francesco

Problemi correlati