2010-04-22 20 views

Respuesta

19

duplicar su tabla en una tabla de se archivará:

SELECT * INTO ArchiveTable FROM MyTable 

Borrar todos los registros de la tabla:

DELETE * FROM MyTable 
+0

Champion! ¡Gracias! – iamjonesy

+2

Esto solo funciona si ArchiveTable no se ha creado todavía; de lo contrario, aparecerá el error "Ya hay un objeto llamado 'ArchiveTable' en la base de datos.". – Harvey

+0

TRUNCATE es una opción mejor que DELETE. –

12

No tienen servidor SQL en torno a probar, pero creo que es justo:

insert into newtable select * from oldtable; 
+0

agradable uno! pero nunca confío en el orden de los campos;) – ntziolis

+2

Si hubiera algún lugar donde se debería usar "SELECT *" es en una consulta como esta ... Hace una copia de la tabla sin tener que saber qué contiene. –

+1

@Robin - Acepto que a * es una buena opción aquí, ** SI ** el orden de los campos es el mismo;) – ntziolis

7

O se puede utilizar SQL RAW:

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

O utilizar el asistente:

  1. Haga clic derecho en la base de datos -> Tareas -> Exportar datos
  2. Seleccione la base de datos de origen/destino
  3. Seleccionar origen/destino de mesa y campos
  4. copiar los datos

luego ejecutar:

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

+1, esto es mejor que la respuesta seleccionada. –

+0

Para obtener más información sobre por qué debería usar TRUNCATE en lugar de DELETE, vea http://dba.stackexchange.com/questions/30325/delete-vs-truncate – user1069816

2

probar esto solo comando para ambos borrar e insertar los datos:

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

muestra de trabajo:

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

SALIDA:

(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

Esto funcionará:

select * into DestinationDatabase.dbo.[TableName1] from (
Select * from sourceDatabase.dbo.[TableName1])Temp 
Cuestiones relacionadas