Vous pouvez bien sûr créer un script pour une table en utilisant l'interface utilisateur:
Cela produira un CREATE TABLE
script et vous n'aurez qu'à rechercher et remplacer l'ancien nom par le nouveau nom (et vérifier qu'un objet avec le nouveau nom n'existe pas déjà).
Mais si vous essayez d'automatiser cela (par exemple, générez le script create table dans le code), c'est un peu plus lourd. L'option de script ci-dessus ne tire pas simplement la totalité du CREATE TABLE
DDL à partir d'un seul emplacement dans les métadonnées; il fait tout un tas de magie dans les coulisses du code pour générer le CREATE TABLE
script éventuel (vous pouvez utiliser Profiler pour voir où il obtient ses données, mais vous ne pouvez pas voir comment il les assemble). J'ai suggéré une option pour cela:
http://connect.microsoft.com/SQLServer/feedback/details/273934
Cependant, cela a été rencontré avec très peu de votes et a été rapidement abattu par Microsoft. Vous trouverez peut-être beaucoup plus intéressant d'utiliser un outil tiers pour générer un schéma ( j'ai blogué à ce sujet ).
Dans SQL Server 2012, il existe de nouvelles fonctions de métadonnées qui vous permettent d'être beaucoup plus proche que le travail que vous avez à faire en 2005, 2008 et 2008 R2, en rassemblant les informations de colonne à partir des métadonnées (qui comporte de nombreuses mises en garde, par exemple si c'est décimal, vous devez ajouter la précision / échelle, si [n [var [char]] vous devez ajouter la spécification de longueur, si n [var] char vous devez couper la max_length en deux, s'il s'agit d'un MAX, vous devez changez -1 en MAX, etc etc). Dans SQL Server 2012, cette partie est un peu plus simple:
SELECT name, system_type_name, is_nullable FROM
sys.dm_exec_describe_first_result_set('select * from sys.objects', NULL, 0)
Résultats:
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
J'ai aussi blogué à ce sujet.
On peut dire que cela est beaucoup plus proche de votre CREATE TABLE
déclaration cible qu'une approche alambiquée sys.columns
, mais il y a encore beaucoup de travail à faire. Clés, contraintes, options de texte dans la ligne, informations sur le groupe de fichiers, paramètres de compression, index, etc. -analogie utilisée, réinventer la roue.
Cela dit, si vous devez le faire via du code mais que vous pouvez le faire en dehors de SQL Server, vous pouvez envisager SMO / PowerShell. Voir cette astuce et la méthode Scripter.Script () .
j'ai écrit ce sp pour créer automatiquement le schéma avec tout, pk, fk, partitions, contraintes ...
IMPORTANT!! avant exec
ici le SP:
pour l'exécuter:
la source
Cela pourrait être d'utiliser un marteau-piqueur pour mettre un clou dans un mur, mais étant donné l'ampleur de la question, je pense que c'est une option valable à mentionner.
Si vous utilisez SQL Server 2012 SP4 +, 2014 SP2 + ou 2016 SP1 +, vous pouvez utiliser
DBCC CLONEDATABASE
pour créer une copie sans schéma de votre base de données sans données. Ceci est idéal pour générer des copies de schéma complètes de plusieurs tables et peut réduire le besoin d '«automatiser» le processus de bouclage à travers une série de tables, mais sachez que toutes les copies de table seront créées à l'intérieur d'une nouvelle base de données en lecture seule .Ces tableaux seront notamment les clés étrangères, les clés primaires, des index et des contraintes. Ils comprendront également des statistiques et des données de magasin de requêtes (sauf si vous spécifiez
NO_STATISTICS
etNO_QUERYSTORE
).La syntaxe est
Il y a aussi quelques autres mises en garde à connaître, sur lesquelles Brent Ozar a un excellent article , mais tout se résume vraiment à comment et pourquoi vous souhaitez créer des copies de tableaux pour savoir si certaines subtilités sont ou non des accords. .
la source
Vous pouvez utiliser la commande "Générer un script" dans SQL Server Management Studio pour obtenir un script qui peut créer votre table, y compris des index, des déclencheurs, des clés étrangères, etc.
Dans SSMS
Vous pouvez ensuite modifier pour inclure exactement ce dont vous avez besoin dans votre base de données de destination.
la source
Voici une version basée sur celle d'E.Mantovanelli dans ce fil. Cela corrige un problème où un index unique n'incluait pas le mot clé UNIQUE dans le script résultant. Il ajoute également des paramètres afin qu'une table puisse être créée sans index non clusterisés ou que vous ne puissiez créer qu'un script pour les index non clusterisés. Je l'utilise pour créer une table d'étape, la charger, ajouter les index non clusterisés, puis faire un changement de table, ce qui permet à la charge de s'exécuter plus rapidement et les index ne sont pas fragmentés.
la source
Vous pouvez utiliser ce script pour copier une structure de table avec des clés étrangères mais sans index. Ce script gère les types définis par l'utilisateur et les colonnes calculées avec élégance.
Si vous êtes intéressé, vous pouvez le trouver également sur mon blog: http://www.hansmichiels.com/2016/02/18/how-to-copy-a-database-table-structure-t-sql-scripting-series -s01e01 /
la source
la source