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