Por supuesto, puede crear una tabla de secuencias de comandos relativamente fácil usando la interfaz de usuario:
Esto generará un CREATE TABLE
script y solo tendrá que buscar y reemplazar el nombre antiguo con el nuevo nombre (y verificar que un objeto con el nuevo nombre ya no exista).
Pero si está tratando de automatizar esto (por ejemplo, generar el script de creación de tabla en el código), es un poco más engorroso. La opción de secuencia de comandos anterior no solo extrae todo el CREATE TABLE
DDL de una sola ubicación en los metadatos; hace un montón de magia detrás de escena en el código para generar el eventualCREATE TABLE
secuencia de comandos (puede usar Profiler para ver de dónde obtiene sus datos, pero no puede ver cómo los ensambla). Sugerí una opción para esto:
http://connect.microsoft.com/SQLServer/feedback/details/273934
Sin embargo, esto fue recibido con muy pocos votos y fue rápidamente derribado por Microsoft. Puede resultarle mucho más útil utilizar una herramienta de terceros para generar esquemas ( he publicado un blog sobre esto ).
En SQL Server 2012 hay nuevas funciones de metadatos que le permiten acercarse mucho más que el trabajo que tiene que hacer en 2005, 2008 y 2008 R2, juntando información de columna de los metadatos (que tiene muchas advertencias, por ejemplo si es decimal tiene que agregar la precisión / escala, si [n [var [char]] tiene que agregar la especificación de longitud, si n [var] char tiene que cortar la longitud máxima por la mitad, si es un MAX tiene que cambiar -1 a MAX, etc., etc.) En SQL Server 2012, esta parte es un poco más fácil:
SELECT name, system_type_name, is_nullable FROM
sys.dm_exec_describe_first_result_set('select * from sys.objects', NULL, 0)
Resultados:
name system_type_name is_nullable
-------------------- ---------------- -----------
name nvarchar(128) 0
object_id int 0
principal_id int 1
schema_id int 0
parent_object_id int 0
type char(2) 0
type_desc nvarchar(60) 1
create_date datetime 0
modify_date datetime 0
is_ms_shipped bit 0
is_published bit 0
is_schema_published bit 0
También he blogueado sobre esto.
Podría decirse que esto está mucho más cerca de su objetivo CREATE TABLE
declaración que un enfoque complicado sys.columns
, pero todavía hay mucho trabajo por hacer. Claves, restricciones, opciones de texto en fila, información de grupo de archivos, configuraciones de compresión, índices, etc. Es una lista muy larga y una vez más le sugiero que busque una herramienta de terceros para esto en lugar de, a riesgo de repetir un sobre analogía utilizada, reinventando la rueda.
Dicho todo esto, si necesita hacer esto a través del código pero puede hacerlo fuera de SQL Server, puede considerar SMO / PowerShell. Vea este consejo y el método Scripter.Script () .
escribí este sp para crear automáticamente el esquema con todas las cosas, pk, fk, particiones, restricciones ...
¡¡IMPORTANTE!! antes de ejecutivo
aquí el SP:
para ejecutarlo:
fuente
Esto podría estar usando un martillo neumático para clavar un clavo en la pared, pero dada la amplitud de la pregunta, creo que es una opción válida para mencionar.
Si usa SQL Server 2012 SP4 +, 2014 SP2 + o 2016 SP1 +, puede aprovechar
DBCC CLONEDATABASE
para crear una copia de solo esquema de su base de datos sin datos. Esto es ideal para generar copias de esquemas integrales de varias tablas y puede aliviar la necesidad de "automatizar" el proceso de recorrer una serie de tablas, pero tenga en cuenta que todas las copias de tablas se crearán dentro de una nueva base de datos de solo lectura .Estas tablas se incluyen las claves externas, las claves principales, índices y restricciones. También incluirán estadísticas y datos de almacenamiento de consultas (a menos que especifique
NO_STATISTICS
yNO_QUERYSTORE
).La sintaxis es
También hay un par de advertencias más a tener en cuenta, sobre las cuales Brent Ozar tiene una excelente publicación , pero todo se reduce a cómo y por qué desea crear copias de tablas en cuanto a si alguna de las sutilezas es un factor decisivo o no. .
fuente
Puede usar el comando "Generar secuencia de comandos" en SQL Server Management Studio para obtener una secuencia de comandos que pueda crear su tabla, incluidos índices, activadores, claves foráneas, etc.
En SSMS
Luego puede editar para incluir justo lo que necesita en su base de datos de destino.
fuente
Aquí hay una versión basada en la de E.Mantovanelli en este hilo. Esto corrige un problema en el que un índice único no incluía la palabra clave ÚNICA en el script resultante. También agrega parámetros para que se pueda crear una tabla sin índices no agrupados o solo puede crear un script de los índices no agrupados. Lo uso para crear una tabla de etapas, cargarla, agregar los índices no agrupados y luego hacer un cambio de tabla, que permite que la carga se ejecute más rápido y los índices no están fragmentados.
fuente
Puede usar este script para copiar una estructura de tabla con claves foráneas pero sin índices. Este script maneja los tipos definidos por el usuario y las columnas calculadas con gracia.
Si está interesado, puede encontrarlo también en mi blog: http://www.hansmichiels.com/2016/02/18/how-to-copy-a-database-table-structure-t-sql-scripting-series -s01e01 /
fuente
fuente