web-dev-qa-db-fra.com

SQL Server copie toutes les lignes d'une table dans une autre, c'est-à-dire une table en double

Je veux garder un tableau comme historique et le remplacer par un vide. Comment puis-je le faire via Management Studio?

21
iamjonesy

Dupliquez votre table dans une table à archiver:

SELECT * INTO ArchiveTable FROM MyTable

Supprimez toutes les entrées de votre tableau:

DELETE * FROM MyTable
31
froadie
select * into x_history from your_table_here;
truncate table your_table_here;
21
Michael Buen

Je n'ai pas de serveur SQL à tester mais je pense que c'est juste:

insert into newtable select * from oldtable;
20
Hans Olsson

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 base de données source/cible
  3. Sélectionnez la table et les champs source/cible
  4. Copiez les données

Exécutez ensuite:

TRUNCATE TABLE SOURCE_TABLE
8
ntziolis

essayez ceci commande unique pour 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

PRODUCTION:

(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
KM.