SQL SERVER – Duplicar una tabla

Si estás buscando una forma eficiente de realizar duplicar una tabla en sql server, ¡has llegado al lugar correcto! Ya sea para realizar pruebas, crear entornos de desarrollo o simplemente tener una copia de seguridad temporal, duplicar una tabla en SQL Server es una tarea más sencilla de lo que muchos imaginan. En este breve post, te mostraré dos métodos rápidos y efectivos para lograrlo, permitiéndote elegir la opción que mejor se adapte a tus necesidades específicas.

¡Vamos a ello!

¿Qué es SELECT INTO en SQL Server?

SELECT INTO es una instrucción de SQL Server que permite crear una tabla nueva a partir del resultado de una consulta SELECT. A diferencia de INSERT INTO, que inserta datos en una tabla que ya existe, SELECT INTO crea la tabla y la rellena en una sola operación.

SQL Server crea automáticamente NuevaTabla con la misma estructura de columnas (nombres, tipos de datos y restricciones NOT NULL) que TablaOrigen, e inserta todas las filas del resultado.

Lo que SÍ copia:

  • Nombres y tipos de datos de las columnas
  • Restricciones NOT NULL
  • Propiedad IDENTITY (salvo en JOINs o UNIONs)
  • Valores de todas las filas (si no usas WHERE)

Lo que NO copia:

  • Índices, claves primarias y foráneas
  • Triggers
  • Restricciones CHECK
  • Esquema de partición
  • Columnas computadas (se copian como valores estáticos)

Copiar la estructura de la tabla de sql server

Usaremos este método que es quizás, la forma más directa y veloz de duplicar una tabla de sql server incluyendo tanto la definición de la estructura (columnas, tipos de datos y restricciones NOT NULL) como todos los datos contenidos en la tabla original.

Su sintaxis es intuitiva y fácil de recordar:

SELECT * Into DestinationTableName From SourceTableName Where 1 = 2 

¿Por qué funciona WHERE 1 = 2?

La condición WHERE 1 = 2 siempre evaluará a falso para todas las filas de la tabla SourceTableName. Como resultado, la consulta SELECT * FROM SourceTableName WHERE 1 = 2 no devolverá ninguna fila. Sin embargo, SQL Server aún procesa la definición de las columnas de la tabla SourceTableName para determinar la estructura del conjunto de resultados. Esta estructura es luego utilizada por la cláusula INTO para crear la nueva tabla DestinationTableName sin insertar ningún dato.

Cuándo es útil copiar solo la estructura:

  • Cuando necesitas una tabla vacía con la misma estructura para importar datos desde otra fuente.
  • Para crear una tabla temporal con la misma estructura para realizar transformaciones o cálculos antes de insertar datos.
  • Como base para diseñar una nueva tabla relacionada con la tabla original, donde solo la estructura inicial es relevante.

Duplicar toda la tabla en sql server

La opción más directa y concisa para realizar una copia completa de una tabla existente en SQL Server, incluyendo tanto su estructura como todos sus datos, es emplear la instrucción SELECT * INTO. Esta funcionalidad permite crear una nueva tabla a partir del resultado de una consulta SELECT. En el caso de querer una réplica exacta, seleccionamos todas las columnas de la tabla original.

La sintaxis básica es la siguiente:

SELECT * INTO MyNewTable FROM MyTable

No se copiarán las constraints o índices.

Copiar índices entre tablas

Copiar los índices es algo más complicado, podéis intentarlo con lo que se propone aquí:

Links

¿Te ha ayudado este artículo?

Invítame a un café

18 thoughts on “SQL SERVER – Duplicar una tabla

  1. Daniel says:

    Con esto he clonado la tabla completa junto con los datos, lo que me gustaría saber es si puedo trabajar en forma independiente con la tabla clonada sin afectar a la original?

  2. sALVADOR says:

    Hola pido ayuda con mi problema al respaldar :
    al ejecutar BACKUP DATABASE a una base de datos “Catalagos” me maraca que no existe o el nombre esta incorrecto( pero si existe y esta correcto el nombre). Lo ejecuto respaldando la base “master” y si funciona, pero con ninguna de mis bases de datos funciona. Enlisto las bases de datos que estan en master y veo que en el campo nombre vienen con el path y no se sis sea eso. Saludos, soy nuevo y uso Microsoft Visual Studio Community 2019.

    CODIGO:
    Try
    Enlace.Conecta(FuncSub.MyConn(“Catalagos”))
    Dim Lbase As String = “Catalagos”
    Cadena = “BACKUP DATABASE ” & Lbase & ” to Disk=’C:\ODIM\Backup.bak’ with init,stats=10″
    ‘Cadena = “BACKUP DATABASE ODIM to Disk=’C:\ODIM\Backup.bak’ with init,stats=10”
    cmd = New SqlCommand(Cadena, conexion)
    ‘MsgBox(“Se jecuta cadena: ” & Cadena & ” en conexion ABIERTA: ” & conexion.ConnectionString)

    cmd.ExecuteNonQuery()
    MsgBox(“Respaldo efectuado”)
    ‘conexion.Close()
    Catch ex As Exception
    MsgBox(“Error al respladar” + ex.Message + ” #” + ex.HResult.ToString)
    ‘conexion.Close()
    End Try

Leave a Reply

Your email address will not be published. Required fields are marked *