2010-04-22 31 views

risposta

19

duplicare il vostro tavolo in una tabella di essere archiviati:

SELECT * INTO ArchiveTable FROM MyTable 

cancellare tutte le voci della tabella:

DELETE * FROM MyTable 
+0

Champion! Grazie! – iamjonesy

+2

Funziona solo se ArchiveTable non è stato ancora creato, altrimenti verrà visualizzato l'errore "Nel database è già presente un oggetto denominato 'ArchiveTable'.". – Harvey

+0

TRUNCATE è un'opzione migliore di DELETE. –

12

Non ce l'ho sql server in giro per testare, ma penso che sia solo:

insert into newtable select * from oldtable; 
+0

nice one! ma non mi fido mai dell'ordine dei campi;) – ntziolis

+2

Se ci fosse un posto dove "SELECT *" dovrebbe essere usato in una query come questa ... Fa una copia della tabella senza dover sapere cosa c'è dentro. –

+1

@Robin - Sono d'accordo sul fatto che * è una buona scelta qui, ** SE ** l'ordine dei campi è lo stesso;) – ntziolis

7

entrambi i casi è possibile utilizzare SQL RAW:

INSERT INTO DEST_TABLE (Field1, Field2) 
SELECT Source_Field1, Source_Field2 
FROM SOURCE_TABLE 

Oppure utilizzare la procedura guidata:

  1. Fare clic destro sul Database -> Attività -> Esporta dati
  2. selezionare il database di origine/destinazione
  3. Seleziona sorgente/destinazione da tavolo e campi
  4. copiare i dati

poi eseguire:

TRUNCATE TABLE SOURCE_TABLE 
18
select * into x_history from your_table_here; 
truncate table your_table_here; 
+5

+1, questo è migliore della risposta selezionata. –

+0

Per ulteriori informazioni sul motivo per cui è necessario utilizzare TRUNCATE anziché DELETE, consultare http://dba.stackexchange.com/questions/30325/delete-vs-truncate – user1069816

2

provare questo unico comando sia per eliminare e inserire i dati:

DELETE MyTable 
    OUTPUT DELETED.Col1, DELETED.COl2,... 
     INTO MyBackupTable 

campione di lavoro:

--set up the tables 
DECLARE @MyTable table (col1 int, col2 varchar(5)) 
DECLARE @MyBackupTable table (col1 int, col2 varchar(5)) 
INSERT INTO @MyTable VALUES (1,'A') 
INSERT INTO @MyTable VALUES (2,'B') 
INSERT INTO @MyTable VALUES (3,'C') 
INSERT INTO @MyTable VALUES (4,'D') 

--single command that does the delete and inserts 
DELETE @MyTable 
    OUTPUT DELETED.Col1, DELETED.COl2 
     INTO @MyBackupTable 

--show both tables final values 
select * from @MyTable 
select * from @MyBackupTable 

USCITA:

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(1 row(s) affected) 

(4 row(s) affected) 
col1  col2 
----------- ----- 

(0 row(s) affected) 

col1  col2 
----------- ----- 
1   A 
2   B 
3   C 
4   D 

(4 row(s) affected) 
-2

Ciò funzionerà:

select * into DestinationDatabase.dbo.[TableName1] from (
Select * from sourceDatabase.dbo.[TableName1])Temp 
Problemi correlati