Sie können eine Tabelle natürlich relativ einfach über die Benutzeroberfläche skripten:
Dadurch wird ein CREATE TABLE
Skript ausgegeben, und Sie müssen nur den alten Namen suchen und durch den neuen Namen ersetzen (und sicherstellen, dass ein Objekt mit dem neuen Namen noch nicht vorhanden ist).
Wenn Sie jedoch versuchen, dies zu automatisieren (z. B. das Skript zum Erstellen von Tabellen in Code zu generieren), ist dies etwas umständlicher. Mit der obigen Skriptoption wird nicht nur die gesamte CREATE TABLE
DDL von einer einzelnen Position in den Metadaten abgerufen. Hinter den Kulissen des Codes wird eine ganze Menge Magie ausgeführt, um das endgültige CREATE TABLE
Skript zu generieren (Sie können den Profiler verwenden, um zu sehen, woher er seine Daten bezieht , aber Sie können nicht sehen, wie er sie zusammensetzt). Ich schlug eine Option dafür vor:
http://connect.microsoft.com/SQLServer/feedback/details/273934
Dies wurde jedoch mit sehr wenigen Stimmen getroffen und schnell von Microsoft abgeschossen. Möglicherweise lohnt es sich viel mehr, ein Drittanbieter-Tool zum Generieren von Schemata zu verwenden ( ich habe darüber gebloggt ).
In SQL Server 2012 gibt es neue Metadatenfunktionen, mit denen Sie Ihre Arbeit in den Jahren 2005, 2008 und 2008 R2 viel genauer ausführen können, indem Sie die Spalteninformationen aus den Metadaten zusammenfügen (was zum Beispiel einige Einschränkungen mit sich bringt, wenn dies der Fall ist) Dezimal müssen Sie die Genauigkeit / Skalierung hinzufügen, wenn [n [var [char]] Sie die Längenangabe hinzufügen müssen, wenn n [var] char müssen Sie die max_length halbieren, wenn es ein MAX ist, müssen Sie Ändern Sie -1 auf MAX usw. usw.). In SQL Server 2012 ist dieser Teil etwas einfacher:
SELECT name, system_type_name, is_nullable FROM
sys.dm_exec_describe_first_result_set('select * from sys.objects', NULL, 0)
Ergebnisse:
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
Ich habe auch darüber gebloggt.
Möglicherweise ist dies Ihrer gezielten CREATE TABLE
Aussage viel näher als ein komplizierter Ansatz sys.columns
, aber es gibt noch viel zu tun. Schlüssel, Einschränkungen, Text in Zeilenoptionen, Dateigruppeninformationen, Komprimierungseinstellungen, Indizes usw. Es ist eine sehr lange Liste, und ich schlage erneut vor, dass Sie sich hierfür ein Tool eines Drittanbieters ansehen, und nicht das Risiko einer Wiederholung eines Over -verwendete Analogie, das Rad neu zu erfinden.
Das heißt, wenn Sie dies über Code tun müssen, dies aber außerhalb von SQL Server tun können, können Sie SMO / PowerShell in Betracht ziehen. Siehe diesen Tipp und die Scripter.Script () -Methode .
Ich habe dieses SP geschrieben, um automatisch das Schema mit allen Dingen zu erstellen, pk, fk, Partitionen, Einschränkungen ...
WICHTIG!! vor exec
hier die SP:
um es auszuführen:
quelle
Dies könnte ein Presslufthammer sein, um einen Nagel in eine Wand zu stechen, aber angesichts der Breite der Frage halte ich es für eine berechtigte Option, dies zu erwähnen.
Wenn Sie SQL Server 2012 SP4 +, 2014 SP2 + oder 2016 SP1 + verwenden, können Sie mithilfe dieser Option
DBCC CLONEDATABASE
eine Nur-Schema-Kopie Ihrer Datenbank ohne Daten erstellen. Dies ist ideal zum Generieren umfassender Schemakopien mehrerer Tabellen und kann die Notwendigkeit einer "Automatisierung" des Durchlaufens einer Reihe von Tabellen verringern. Beachten Sie jedoch, dass alle Tabellenkopien in einer neuen schreibgeschützten Datenbank erstellt werden .Diese Tabellen werden sind Fremdschlüssel, Primärschlüssel, Indizes und Einschränkungen. Sie enthalten auch Statistiken und Abfragespeicherdaten (sofern Sie nicht
NO_STATISTICS
und angebenNO_QUERYSTORE
).Die Syntax lautet
Es gibt auch ein paar andere Vorbehalte, die beachtet werden müssen, worauf Brent Ozar einen großartigen Beitrag leistet , aber es läuft alles darauf hinaus, wie und warum Sie Kopien von Tabellen erstellen möchten, um festzustellen, ob es sich bei den Feinheiten um Deal Breaker handelt oder nicht .
quelle
Mit dem Befehl "Skript generieren" in SQL Server Management Studio können Sie ein Skript abrufen, mit dem Sie Ihre Tabelle erstellen können, einschließlich Indizes, Trigger, Fremdschlüssel usw.
In SSMS
Sie können dann bearbeiten, um genau das, was Sie benötigen, in Ihre Zieldatenbank aufzunehmen.
quelle
Hier ist eine Version, die auf der von E. Mantovanelli in diesem Thread basiert. Dies behebt ein Problem, bei dem in einem eindeutigen Index das Schlüsselwort UNIQUE nicht im resultierenden Skript enthalten war. Außerdem werden Parameter hinzugefügt, sodass eine Tabelle ohne nicht gruppierte Indizes erstellt werden kann, oder Sie können nur die nicht gruppierten Indizes skripten. Ich verwende dies, um eine Stage-Tabelle zu erstellen, sie zu laden, die nicht geclusterten Indizes hinzuzufügen und dann eine Tabellenumschaltung durchzuführen, mit der das Laden schneller ausgeführt werden kann und die Indizes nicht fragmentiert sind.
quelle
Mit diesem Skript können Sie eine Tabellenstruktur mit Fremdschlüsseln, jedoch ohne Indizes kopieren. Dieses Skript behandelt benutzerdefinierte Typen und berechnete Spalten ordnungsgemäß.
Wenn Sie interessiert sind, können Sie es auch auf meinem Blog finden: http://www.hansmichiels.com/2016/02/18/how-to-copy-a-database-table-structure-t-sql-scripting-series -s01e01 /
quelle
quelle