2010-04-22 19 views

Odpowiedz

19

Duplikat tabelę w tabeli do zarchiwizowane:

SELECT * INTO ArchiveTable FROM MyTable 

Usuń wszystkie wpisy w tabeli:

DELETE * FROM MyTable 
+0

Champion! dzięki! – iamjonesy

+2

Działa to tylko wtedy, gdy ArchiveTable nie został jeszcze utworzony, w przeciwnym razie pojawi się błąd "W bazie danych znajduje się już obiekt o nazwie" ArchiveTable ".". – Harvey

+0

TRUNCATE jest lepszym rozwiązaniem niż DELETE. –

12

Nie masz serwer sql wokół przetestować, ale myślę, że to po prostu:

insert into newtable select * from oldtable; 
+0

nice one! ale nigdy nie ufam kolejność pól;) – ntziolis

+2

Jeśli było jakieś miejsce, w którym "SELECT *" powinno być używane w takim zapytaniu ... Tworzy kopię tabeli bez konieczności sprawdzania, co się w niej znajduje. –

+1

@Robin - Zgadzam się, że * jest dobrym wyborem tutaj, ** JEŻELI ** kolejność pól jest taka sama;) – ntziolis

7

Albo można użyć RAW SQL:

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

Albo użyć kreatora:

  1. Kliknij prawym przyciskiem myszy bazę danych -> Zadania -> Eksportuj dane
  2. Wybierz bazę danych źródło/docelowego
  3. Wybierz źródło/target Stół i pola
  4. skopiować dane

Następnie wykonać:

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

+1, to jest lepsze niż wybrana odpowiedź. –

+0

Aby uzyskać więcej informacji o tym, dlaczego powinieneś używać TRUNCATE zamiast DELETE zobacz http://dba.stackexchange.com/questions/30325/delete-vs-truncate – user1069816

2

spróbować tej jednego polecenia zarówno usunąć i wstawić dane:

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

próbki robocze:

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

WYJŚCIE:

(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

to będzie działać:

select * into DestinationDatabase.dbo.[TableName1] from (
Select * from sourceDatabase.dbo.[TableName1])Temp 
Powiązane problemy