SQL Server: creare una copia di una tabella di database e inserirla nello stesso database?


108

Ho una tabella ABC in un database DB. Voglio creare copie di ABC con i nomi ABC_1, ABC_2, ABC_3 nello stesso DB. Come posso farlo utilizzando Management Studio (preferibilmente) o query SQL?

Questo è per SQL Server 2008 R2.


1
un altro post non direttamente correlato, ma può essere correlato al caso d'uso di cui sopra - stackoverflow.com/questions/6810425/… questo può essere utile quando si desidera modificare le copie della tabella (es. consentire null, modificare il tipo di dati ecc. .) senza dover ricreare le copie.
sequel

Risposte:


212

Usa SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

Questo creerà una nuova tabella ABC_1che ha la stessa struttura di colonne ABCe contiene gli stessi dati. I vincoli (ad esempio chiavi, valori predefiniti), tuttavia, non vengono copiati.

È possibile eseguire questa query più volte con un nome di tabella diverso ogni volta.


Se non è necessario copiare i dati, solo per creare una nuova tabella vuota con la stessa struttura di colonne, aggiungere una WHEREclausola con un'espressione falsa:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

3
Risposta perfetta per il mio problema.
sequel

8
Non funziona completamente ... le colonne calcolate nell'originale non vengono copiate come le stesse nella destinazione. Inoltre, i vincoli PK e Default non vengono copiati
Simon Green

@SimonGreen - Puoi pubblicare una nuova domanda per questo problema con il tuo codice.
Mahmoud Gamal

3
Ovviamente non funziona completamente. Ha avvertito che i vincoli non vengono copiati, né le chiavi primarie oi valori predefiniti. Il comando che offre crea una nuova tabella con la stessa struttura di colonne (proprio come ha detto) e inserisce tutti i dati nella nuova tabella per te.
user5855178

1
Trovo che si usi SELECT TOP(0) *più pulito del WHEREmetodo delle affermazioni sempre false
Thymine

21

Copia schema (genera DDL) tramite l'interfaccia utente di SSMS

In SSMS espandi il tuo database in Esplora oggetti , vai su Tabelle , fai clic con il pulsante destro del mouse sulla tabella che ti interessa e seleziona Tabella script come , Crea in , Nuova finestra dell'editor di query . Fai una ricerca e sostituisci ( CTRL + H ) per cambiare il nome della tabella (ad esempio, inserisci ABCnel campo Trova e ABC_1in Sostituisci con quindi fai clic su OK ).

Copia lo schema tramite T-SQL

Anche le altre risposte che mostrano come eseguire questa operazione tramite SQL funzionano bene, ma la differenza con questo metodo è che otterrai anche eventuali indici, vincoli e trigger.

Copia dati

Se desideri includere dati, dopo aver creato questa tabella esegui lo script seguente per copiare tutti i dati da ABC (mantenendo gli stessi valori ID se hai un campo identità):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off

1
Sei sicuro che questo metodo copi anche gli indici? L'ho provato e non l'ha fatto.
BornToCode

3
È necessario impostare IDENTITY_INSERTsu ON per consentire di impostare la colonna identità "manualmente", hai mescolato l'ordine nel tuo esempio. Inoltre, devi ESPLICITAMENTE elencare le tue colonne
jean

2
Grazie @jean; ben avvistato dopo 6 anni inosservato! Fisso.
JohnLBevan

Questo ha quasi risolto il problema per me. L'ultimo trucco è che puoi trascinare la cartella "Colonne" nell'albero in SSMS nell'editor per ottenere un elenco di colonne. Ho una colonna timestamp su ogni tabella, quindi ho dovuto ottenere l'elenco delle colonne e quindi rimuovere il timestamp.
Wade Hatler,

10

Se desideri duplicare la tabella con tutti i suoi vincoli e chiavi, segui questi passaggi:

  1. Apri il database in SQL Management Studio.
  2. Fare clic con il tasto destro sulla tabella che si desidera duplicare.
  3. Seleziona Tabella script come -> Crea in -> Nuova finestra dell'editor di query. Questo genererà uno script per ricreare la tabella in una nuova finestra di query.
  4. Modificare il nome della tabella e le relative chiavi e vincoli nello script.
  5. Esegui lo script.

Quindi per copiare i dati eseguire questo script di seguito:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF

4

1a opzione

select *
  into ABC_1
  from ABC;

2a opzione: usa SSIS, ovvero fai clic con il pulsante destro del mouse sul database in Esplora oggetti> tutte le attività> esporta dati

  • origine e destinazione: il tuo DB
  • tabella di origine: ABC
  • tabella di destinazione: ABC_1 (la tabella verrà creata)

2

Questa è un'altra opzione:

select top 0 * into <new_table> from <original_table>

2
Questa richiesta copia la tabella senza dati. L'utente ha chiesto di copiare le tabelle.
Alekzander

1

usa sql server manegement studio o netcat e sarà più facile manipolare sql


1

È necessario scrivere SSIS per copiare la tabella e i relativi dati, vincoli e trigger. Abbiamo nella nostra organizzazione un software chiamato Kal Admin di kalrom Systems che ha una versione gratuita per il download (penso che la funzione di copia delle tabelle sia opzionale)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.