Ho un database chiamato foo e un database chiamato bar. Ho una tabella in foo chiamata tblFoobar che voglio spostare (dati e tutto) nella barra del database dal database foo. Qual è l'istruzione SQL per fare questo?
Ho un database chiamato foo e un database chiamato bar. Ho una tabella in foo chiamata tblFoobar che voglio spostare (dati e tutto) nella barra del database dal database foo. Qual è l'istruzione SQL per fare questo?
Risposte:
Su SQL Server? e sullo stesso server di database? Usa la denominazione in tre parti.
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
Questo sposta solo i dati. Se vuoi spostare la definizione della tabella (e altri attributi come permessi e indici), dovrai fare qualcos'altro.
L'attività "Importa dati" di SQL Server Management Studio (fare clic con il pulsante destro del mouse sul nome del database, quindi sulle attività) farà la maggior parte delle operazioni. Eseguirlo dal database in cui si desidera copiare i dati.
Se le tabelle non esistono, le creerà per te, ma probabilmente dovrai ricreare qualsiasi indice e simili. Se le tabelle esistono, aggiungerà i nuovi dati per impostazione predefinita ma è possibile modificarli (modificare i mapping) in modo da eliminare tutti i dati esistenti.
Lo uso sempre e funziona abbastanza bene.
WHERE
condizione utilizzando l'attività Importa dati? Non sono riuscito a trovare un modo per farlo.
Questo dovrebbe funzionare:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
Sarà Non copiare constaints, inadempienze o indici. La tabella creata non avrà un indice cluster.
In alternativa puoi:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Se la tabella di destinazione esiste ed è vuota.
INSERT INTO...
) ha funzionato per me in Oracle.
Se è solo una tabella, tutto ciò che devi fare è
Una cosa che dovrai considerare è altri aggiornamenti come la migrazione di altri oggetti in futuro. Si noti che le tabelle di origine e destinazione non hanno lo stesso nome. Ciò significa che dovrai anche apportare modifiche se dipendi da oggetti come viste, stored procedure e altro.
Con uno o più oggetti puoi andare manualmente senza problemi. Tuttavia, quando ci sono molti altri aggiornamenti, gli strumenti di confronto di terze parti sono molto utili. In questo momento sto usando ApexSQL Diff per le migrazioni di schemi ma non puoi sbagliare con nessun altro strumento.
Script in create table
in management studio, esegui quello script nella barra per creare la tabella. (Fare clic con il pulsante destro del mouse in Esplora oggetti, tabella script come, creare in ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
in quel caso.
È inoltre possibile utilizzare la procedura guidata Genera script di SQL Server per guidare la creazione di script SQL in grado di effettuare le seguenti operazioni:
Buon esempio di flusso di lavoro per SQL Server 2008 con schermate mostrate qui .
Puoi procedere in questo modo: (un esempio generale)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Inoltre, se è necessario generare anche i nomi delle colonne per inserire la clausola insert, utilizzare:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
Copia il risultato e incollalo nella finestra della query per rappresentare i nomi delle colonne della tabella e anche questo escluderà anche la colonna identità:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
Ricorda che lo script per copiare le righe funzionerà se i database appartengono alla stessa posizione.
Puoi provare questo.
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
Il nome del server è facoltativo se entrambi i DB si trovano nello stesso server.
Copia dati
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details