2010-04-22 7 views

Répondre

19

dupliquer votre table dans une table être archivé:

SELECT * INTO ArchiveTable FROM MyTable 

Effacer toutes les entrées de votre table:

DELETE * FROM MyTable 
+0

Champion! Merci! – iamjonesy

+2

Cela ne fonctionne que si ArchiveTable n'a pas encore été créé, sinon vous obtiendrez l'erreur "Il y a déjà un objet nommé 'ArchiveTable' dans la base de données.". – Harvey

+0

TRUNCATE est une meilleure option que DELETE. –

12

Ne pas avoir serveur sql autour de tester mais je pense qu'il est juste:

insert into newtable select * from oldtable; 
+0

nice one! mais je ne fais jamais confiance à l'ordre des champs;) – ntziolis

+2

S'il y avait un endroit où "SELECT *" devrait être utilisé dans une requête comme ceci ... Il fait une copie de la table sans avoir à savoir ce qu'il y a dedans. –

+1

@Robin - Je suis d'accord qu'un * est un bon choix ici, ** SI ** l'ordre des champs est le même;) – ntziolis

7

Soit vous pouvez utiliser RAW SQL:

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

Ou utilisez l'Assistant:

  1. Clic droit sur la base de données -> Tâches -> Exporter les données
  2. Sélectionnez la source/cible Base de données
  3. Sélectionnez la source/table cible et champs
  4. Copiez les données

execute Puis:

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

+1, c'est mieux que la réponse sélectionnée. –

+0

Pour plus d'informations sur pourquoi vous devriez utiliser TRUNCATE plutôt que DELETE voir http://dba.stackexchange.com/questions/30325/delete-vs-truncate – user1069816

2

essayer cette seule commande à la fois supprimer et insérer les données:

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

échantillon de travail:

--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 

SORTIE:

(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

Cela fonctionne:

select * into DestinationDatabase.dbo.[TableName1] from (
Select * from sourceDatabase.dbo.[TableName1])Temp 
Questions connexes