SQL Server: ¿crear una copia de una tabla de base de datos y colocarla en la misma base de datos?

108

Tengo una tabla ABC en una base de datos DB. Quiero crear copias de ABC con los nombres ABC_1, ABC_2, ABC_3 en la misma base de datos. ¿Cómo puedo hacer eso usando Management Studio (preferiblemente) o consultas SQL?

Esto es para SQL Server 2008 R2.

aprendiz de secuela
fuente
1
otra publicación no relacionada directamente, pero puede estar relacionada con el caso de uso anterior: stackoverflow.com/questions/6810425/ ... esto puede ser útil cuando desea editar las copias de la tabla (por ejemplo, permitir nulos, cambiar el tipo de datos, etc. .) sin tener que volver a crear las copias.
sequel.learner

Respuestas:

212

Utilizar SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

Esto creará una nueva tabla ABC_1que tiene la misma estructura de columnas ABCy contiene los mismos datos. Sin embargo, las restricciones (por ejemplo, claves, valores predeterminados) no se copian.

Puede ejecutar esta consulta varias veces con un nombre de tabla diferente cada vez.


Si no necesita copiar los datos, solo para crear una nueva tabla vacía con la misma estructura de columna, agregue una WHEREcláusula con una expresión falsa:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
Mahmoud Gamal
fuente
3
Respuesta perfecta a mi problema.
sequel.learner
8
No funciona completamente ... las columnas calculadas en el original no se copian como iguales en el destino. Además, las restricciones PK y Default tampoco se copian
Simon Green
@SimonGreen: puede publicar una nueva pregunta para este problema con su código.
Mahmoud Gamal
3
Por supuesto que no funciona del todo. Advirtió que las restricciones no se copian, ni las claves primarias ni los valores predeterminados. El comando que ofrece crea una nueva tabla con la misma estructura de columnas (como él dijo) e inserta todos los datos en la nueva tabla por usted.
user5855178
1
Encuentro el uso SELECT TOP(0) *más limpio que el WHEREmétodo de declaración siempre falsa
Thymine
21

Copiar esquema (generar DDL) a través de la interfaz de usuario de SSMS

En SSMS, expanda su base de datos en el Explorador de objetos , vaya a Tablas , haga clic con el botón derecho en la tabla que le interese y seleccione Script Table As , Create To , New Query Editor Window . Haga una búsqueda y reemplace ( CTRL + H ) para cambiar el nombre de la tabla (es decir, coloque ABCen el campo Buscar qué y ABC_1en Reemplazar con luego haga clic en Aceptar ).

Copiar esquema a través de T-SQL

Las otras respuestas que muestran cómo hacer esto mediante SQL también funcionan bien, pero la diferencia con este método es que también obtendrá índices, restricciones y activadores.

Copiar datos

Si desea incluir datos, después de crear esta tabla, ejecute el siguiente script para copiar todos los datos de ABC (manteniendo los mismos valores de ID si tiene un campo de identidad):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
JohnLBevan
fuente
1
¿Estás seguro de que este método también copia los índices? Lo probé y no funcionó.
BornToCode
3
Debe establecer IDENTITY_INSERTen ON para permitir establecer la columna de identidad "manualmente", mezcló el orden en su ejemplo. Además, debe hacer una lista EXPLÍCITA de sus columnas
jean
2
Gracias @jean; ¡Bien visto después de 6 años sin ser notado! Fijo.
JohnLBevan
Esto casi me solucionó el problema. El último truco es que puede arrastrar la carpeta "Columnas" en el árbol en SSMS al editor para obtener una lista de columnas. Tengo una columna de marca de tiempo en cada tabla, así que tuve que obtener la lista de columnas y luego eliminar la marca de tiempo.
Wade Hatler
10

Si desea duplicar la tabla con todas sus restricciones y claves, siga los siguientes pasos:

  1. Abra la base de datos en SQL Management Studio.
  2. Haga clic con el botón derecho en la tabla que desea duplicar.
  3. Seleccione Tabla de secuencia de comandos como -> Crear en -> Nueva ventana del editor de consultas. Esto generará una secuencia de comandos para recrear la tabla en una nueva ventana de consulta.
  4. Cambie el nombre de la tabla y las claves y restricciones relativas en el script.
  5. Ejecute el script.

Luego, para copiar los datos, ejecute este script a continuación:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF
Rousonur Jaman
fuente
4

Primera opción

select *
  into ABC_1
  from ABC;

2da opción: use SSIS, es decir, haga clic con el botón derecho en la base de datos en el explorador de objetos> todas las tareas> exportar datos

  • fuente y destino: su base de datos
  • tabla de origen: ABC
  • tabla de destino: ABC_1 (se creará la tabla)
Claude
fuente
2

Esta es otra opción:

select top 0 * into <new_table> from <original_table>
Keni
fuente
2
Esta solicitud copia tabla sin datos. Se le pidió al usuario que copiara las tablas.
Alekzander
1

use sql server manegement studio o netcat y será más fácil manipular sql

gasroot
fuente
1

Necesita escribir SSIS para copiar la tabla y sus datos, restricciones y disparadores. Tenemos en nuestra organización un software llamado Kal Admin de kalrom Systems que tiene una versión gratuita para descargar (creo que la función de copiar tablas es opcional)

Chris D
fuente