sql-server - ricostruzione - sql server index




Qual è il modo migliore per generare automaticamente istruzioni INSERT per una tabella di SQL Server? (13)

È possibile utilizzare SSMS Tools Pack (disponibile per SQL Server 2005 e 2008). Viene fornito con una funzionalità per la generazione di istruzioni di inserimento.

http://www.ssmstoolspack.com/

Stiamo scrivendo una nuova applicazione e, durante il test, avremo bisogno di un sacco di dati fittizi. Ho aggiunto i dati utilizzando MS Access per scaricare i file excel nelle tabelle pertinenti.

Ogni tanto, vogliamo "aggiornare" le tabelle rilevanti, il che significa eliminarle tutte, ricrearle ed eseguire una query di accodamento di MS Access salvata.

La prima parte (dropping & re-creating) è una semplice script sql, ma l'ultima parte mi fa rabbrividire. Voglio un singolo script di installazione che abbia un sacco di INSERT per rigenerare i dati fittizi.

Ho i dati nelle tabelle ora. Qual è il modo migliore per generare automaticamente una grande lista di istruzioni INSERT da quel set di dati?

L'unico modo che posso pensare di fare è salvare la tabella in un foglio Excel e quindi scrivere una formula Excel per creare un INSERT per ogni riga, che non è sicuramente il modo migliore.

Sto utilizzando Management Studio 2008 per connettersi a un database SQL Server 2005.


Come menzionato da @Mike Ritacco ma aggiornato per SSMS 2008 R2

  1. Fare clic con il tasto destro sul nome del database
  2. Scegli Attività> Genera script
  3. A seconda delle impostazioni, la pagina di introduzione potrebbe essere visualizzata o meno
  4. Scegli 'Seleziona oggetti di database specifici',
  5. Espandi la vista ad albero e controlla le tabelle pertinenti
  6. Fare clic su Avanti
  7. Clicca Avanzate
  8. Nella sezione Generale, seleziona l'opzione appropriata per "Tipi di dati da script"
  9. Completa il mago

Otterrai quindi tutte le istruzioni INSERT per i dati direttamente da SSMS.

EDIT 2016-10-25 SQL Server 2016 / SSMS 13.0.15900.1

  1. Fare clic con il tasto destro sul nome del database

  2. Scegli Attività> Genera script

  3. A seconda delle impostazioni, la pagina di introduzione potrebbe essere visualizzata o meno

  4. Scegli 'Seleziona oggetti di database specifici',

  5. Espandi la vista ad albero e controlla le tabelle pertinenti

  6. Fare clic su Avanti

  7. Clicca Avanzate

  8. Nella sezione Generale, seleziona l'opzione appropriata per "Tipi di dati da script"

  9. Clicca OK

  10. Scegli se vuoi che l'output vada a una nuova query, negli appunti o in un file

  11. Fare clic su Avanti due volte

  12. Il tuo copione è preparato secondo le impostazioni che hai scelto sopra

  13. Fai clic su Fine


Hai già dati in un database di produzione? In tal caso, è possibile impostare un aggiornamento periodico dei dati tramite DTS. Facciamo il nostro settimanale nei fine settimana ed è molto bello avere dati reali e puliti ogni settimana per i nostri test.

Se non hai ancora la produzione, dovresti creare un database che vogliono che tu lo voglia (fresco). Quindi, duplica il database e utilizza il database appena creato come ambiente di test. Quando vuoi la versione pulita, ripeti semplicemente quella pulita e Bob è tuo zio .


Ho anche studiato molto su questo, ma non ho potuto ottenere la soluzione concreta per questo. Attualmente l'approccio che seguo è copiare i contenuti in Excel da SQL Server Managment Studio e quindi importare i dati in Oracle-TOAD e quindi generare le istruzioni di inserimento


Il mio contributo al problema, un generatore di script Powershell INSERT che consente di creare script su più tabelle senza dover utilizzare l'ingombrante interfaccia grafica SSMS. Ottimo per i dati "seme" rapidamente persistenti nel controllo del codice sorgente.

  1. Salva lo script seguente come "nomefile.ps1".
  2. Apporta le tue modifiche alle aree sotto "PERSONALIZZA ME".
  3. È possibile aggiungere l'elenco di tabelle da scrivere in qualsiasi ordine.
  4. È possibile aprire lo script in Powershell ISE e premere il pulsante Riproduci, o semplicemente eseguire lo script nel prompt dei comandi di Powershell.

Per impostazione predefinita, lo script INSERT generato sarà "SeedData.sql" nella stessa cartella dello script.

Avrai bisogno degli assembly di SQL Server Management Objects installati, che dovrebbero essere presenti se hai installato SSMS.

Add-Type -AssemblyName ("Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
Add-Type -AssemblyName ("Microsoft.SqlServer.ConnectionInfo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")



#CUSTOMIZE ME
$outputFile = ".\SeedData.sql"
$connectionString = "Data Source=.;Initial Catalog=mydb;Integrated Security=True;"



$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
$db = $srv.Databases[$srv.ConnectionContext.DatabaseName]
$scr = New-Object Microsoft.SqlServer.Management.Smo.Scripter $srv
$scr.Options.FileName = $outputFile
$scr.Options.AppendToFile = $false
$scr.Options.ScriptSchema = $false
$scr.Options.ScriptData = $true
$scr.Options.NoCommandTerminator = $true

$tables = New-Object Microsoft.SqlServer.Management.Smo.UrnCollection



#CUSTOMIZE ME
$tables.Add($db.Tables["Category"].Urn)
$tables.Add($db.Tables["Product"].Urn)
$tables.Add($db.Tables["Vendor"].Urn)



[void]$scr.EnumScript($tables)

$sqlConnection.Close()

Il primo link a sp_generate_inserts è piuttosto interessante, ecco una versione molto semplice:

DECLARE @Fields VARCHAR(max); SET @Fields = '[QueueName], [iSort]' -- your fields, keep []
DECLARE @Table  VARCHAR(max); SET @Table  = 'Queues'               -- your table

DECLARE @SQL    VARCHAR(max)
SET @SQL = 'DECLARE @S VARCHAR(MAX)
SELECT @S = ISNULL(@S + '' UNION '', ''INSERT INTO ' + @Table + '(' + @Fields + ')'') + CHAR(13) + CHAR(10) + 
 ''SELECT '' + ' + REPLACE(REPLACE(REPLACE(@Fields, ',', ' + '', '' + '), '[', ''''''''' + CAST('),']',' AS VARCHAR(max)) + ''''''''') +' FROM ' + @Table + '
PRINT @S'

EXEC (@SQL)

Sul mio sistema, ottengo questo risultato:

INSERT INTO Queues([QueueName], [iSort])
SELECT 'WD: Auto Capture', '10' UNION 
SELECT 'Car/Lar', '11' UNION 
SELECT 'Scan Line', '21' UNION 
SELECT 'OCR', '22' UNION 
SELECT 'Dynamic Template', '23' UNION 
SELECT 'Fix MICR', '41' UNION 
SELECT 'Fix MICR (Supervisor)', '42' UNION 
SELECT 'Foreign MICR', '43' UNION 
...


Microsoft dovrebbe pubblicizzare questa funzionalità di SSMS 2008. La funzione che si sta cercando è integrata nell'utilità Genera script , ma la funzionalità è disattivata per impostazione predefinita e deve essere abilitata quando si esegue lo script di una tabella.

Si tratta di una rapida esecuzione per generare le istruzioni INSERT per tutti i dati nella tabella, senza utilizzare script o componenti aggiuntivi in ​​SQL Management Studio 2008:

  1. Fai clic con il tasto destro del mouse sul database e vai a Attività > Genera script .
  2. Seleziona le tabelle (o gli oggetti) con cui vuoi generare lo script.
  3. Vai a Imposta la scheda delle opzioni di scripting e fai clic sul pulsante Avanzate .
  4. Nella categoria Generale , vai a Tipo di dati per lo script
  5. Sono disponibili 3 opzioni: solo schema , solo dati e schema e dati . Selezionare l'opzione appropriata e fare clic su OK .

Otterrai quindi l'istruzione CREATE TABLE e tutte le istruzioni INSERT per i dati direttamente da SSMS.


Non utilizzare inserti, utilizzare BCP


Questo può essere fatto usando anche Visual Studio (almeno nella versione 2013 in poi).

In VS 2013 è anche possibile filtrare l'elenco di righe su cui è basata la dichiarazione degli inserimenti, questo non è possibile in SSMS come a quanto so.

Effettuare le seguenti operazioni:

  • Aprire la finestra "Esplora oggetti di SQL Server" (menu: / Visualizza / Esplora oggetti di SQL Server)
  • Apri / espandi il database e le sue tabelle
  • Fare clic con il tasto destro del mouse sul tavolo e selezionare "Visualizza dati" dal menu di scelta rapida
  • Questo mostrerà i dati nell'area principale
  • Passaggio facoltativo: fai clic sull'icona del filtro "Ordina e filtra set di dati" (la quarta icona da sinistra sulla riga sopra il risultato) e applica alcuni filtri a una o più colonne
  • Fai clic sulle icone "Script" o "Script su file" (le icone sulla destra della riga superiore, sembrano piccoli fogli di carta)

Ciò creerà le istruzioni di inserimento (condizionale) per la tabella selezionata nella finestra o nel file attivi.


I pulsanti "Filtro" e "Script" Visual Studio 2013 :


Sto usando SSMS 2008 versione 10.0.5500.0. In questa versione come parte della procedura guidata Genera script, invece di un pulsante Avanzate, c'è la schermata sotto. In questo caso, volevo solo inserire i dati e non creare istruzioni, quindi ho dovuto modificare le due proprietà cerchiate


Usiamo questa procedura memorizzata: consente di scegliere come target tabelle specifiche e utilizzare le clausole where. Puoi trovare il testo here .

Ad esempio, ti permette di fare questo:

EXEC sp_generate_inserts 'titles'

GenerateData è uno strumento straordinario per questo. È anche molto facile apportare modifiche perché il codice sorgente è disponibile per te. Alcune belle caratteristiche:

  • Nome generatore per nomi e luoghi delle persone
  • Possibilità di salvare il profilo di Generazione (dopo che è stato scaricato e impostato localmente)
  • Capacità di personalizzare e manipolare la generazione tramite script
  • Molti diversi output (CSV, Javascript, JSON, ecc.) Per i dati (nel caso sia necessario testare il set in ambienti diversi e saltare l'accesso al database)
  • Gratuito Ma considera di donare se trovi utile il software :).







code-generation