Cómo duplicar una tabla en SQL
Clona o duplica una tabla con SQL y sé más productivo 😎

En este artículo veremos cómo de forma sencilla podemos duplicar una tabla con T-SQL.

Hay 3 formas de lograrlo y te las mostraré todas:

La forma más sencilla

Si quieres duplicar una tabla en la misma base de datos puedes ejecutar el siguiente script:

SELECT *
INTO ClienteEntities2
FROM ClienteEntities

El script anterior incluirá también los datos.

Si no quieres que incluya los datos ejecuta:

SELECT *
INTO ClienteEntities3
FROM ClienteEntities
WHERE 1 = 2

Ten en cuenta que esto sólo clonará la estructura de una tabla, no sus restricciones, como la llave primaria por ejemplo, así que esta tendrás que añadirla manualmente.

Creando tu propia consulta

El siguiente query te duplica una tabla también, no incluye los datos, en este caso sí que te incluye la primary key.

Puedes crear la nueva tabla o solamente obtener el script para duplicar la tabla (esto es útil si quieres obtener un CREATE TABLE y ejecutar este script en otra base de datos).

DECLARE @TableName NVARCHAR(MAX) = 'ClienteEntities'; -- Nombre de tu tabla existente
DECLARE @NewTableName NVARCHAR(MAX) = 'ClienteEntities2'; -- Nombre de la nueva tabla

DECLARE @Script NVARCHAR(MAX) = 'CREATE TABLE ' + @NewTableName + ' (';
SELECT @Script = @Script + 
                '[' + COLUMN_NAME + '] ' + 
                DATA_TYPE + 
                CASE 
                    WHEN DATA_TYPE IN ('varchar', 'nvarchar', 'char', 'nchar') THEN '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(MAX)) + ')' -- Añade la longitud si es una columna de longitud variable
                    WHEN DATA_TYPE IN ('varbinary') THEN '(MAX)' -- Añade la longitud si es una columna de longitud variable
                    WHEN DATA_TYPE IN ('decimal', 'numeric') THEN '(' + CAST(NUMERIC_PRECISION AS NVARCHAR(MAX)) + ',' + CAST(NUMERIC_SCALE AS NVARCHAR(MAX)) + ')' -- Añade precisión y escala para columnas decimales/numéricas
                    ELSE ''
                END + 
                CASE 
                    WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' -- Añade restricción NOT NULL si la columna no permite valores nulos
                    ELSE ''
                END + 
                CASE 
                    WHEN COLUMNPROPERTY(object_id(TABLE_SCHEMA + '.' + @TableName), COLUMN_NAME, 'IsIdentity') = 1 THEN ' IDENTITY(1,1)' -- Añade identidad si la columna es una columna de identidad en la tabla original
                    ELSE ''
                END + 
                ',' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @TableName
ORDER BY ORDINAL_POSITION;

-- Agregando la definición de la clave primaria
DECLARE @PrimaryKey NVARCHAR(MAX) = '';
SELECT @PrimaryKey = @PrimaryKey + '[' + COLUMN_NAME + '],'
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = @TableName
AND CONSTRAINT_NAME LIKE 'PK%' -- Suponiendo que la clave primaria sigue el patrón de nombres común 'PK%'
ORDER BY ORDINAL_POSITION;

IF @PrimaryKey <> ''
BEGIN
    SET @PrimaryKey = 'PRIMARY KEY (' + LEFT(@PrimaryKey, LEN(@PrimaryKey) - 1) + ')';
END

SET @Script = LEFT(@Script, LEN(@Script) - 1) + ', ' + @PrimaryKey + ')'; -- Concatena la definición de la clave primaria y cierra la declaración CREATE TABLE

PRINT @Script; -- Muestra el script generado en el resultado

--Si quieres ejecutar el script directamente descomenta la siguiente línea
--EXEC sp_executesql @Script;

Usando el asistente de SSMS

SQL Server Management Studio nos brinda una forma de obtener scripts de una tabla (o de toda la BD)

Espero que esta entrada te sirva, genio pásala genial ✌️

Créditos imagen de portada: Foto de Nick Design en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *