Oczywiście możesz napisać tabelę stosunkowo łatwo za pomocą interfejsu użytkownika:
Spowoduje to wygenerowanie a CREATE TABLE
skryptu i wystarczy wyszukać i zastąpić starą nazwę nową nazwą (i sprawdzić, czy obiekt o nowej nazwie jeszcze nie istnieje).
Ale jeśli próbujesz to zautomatyzować (np. Wygenerować skrypt tworzenia tabeli w kodzie), jest to trochę bardziej kłopotliwe. Powyższa opcja skryptu nie tylko wyciąga cały CREATE TABLE
DDL z jednego miejsca w metadanych; robi całą masę magii za kulisami w kodzie, aby wygenerować ostateczny CREATE TABLE
skrypt (możesz użyć Profiler, aby zobaczyć, skąd bierze swoje dane, ale nie możesz zobaczyć, jak to składa). Zasugerowałem opcję:
http://connect.microsoft.com/SQLServer/feedback/details/273934
Jednak spotkało się to z bardzo małą liczbą głosów i zostało szybko zestrzelone przez Microsoft. O wiele bardziej opłacalne może być użycie zewnętrznego narzędzia do generowania schematu ( pisałem o tym na blogu ).
W SQL Server 2012 wprowadzono nowe funkcje metadanych, które pozwalają zbliżyć się znacznie do pracy, którą należy wykonać w 2005, 2008 i 2008 R2, gromadząc informacje o kolumnach z metadanych (które zawierają wiele zastrzeżeń, na przykład jeśli jest to dziesiętny musisz dodać precyzję / skalę, jeśli [n [var [char]] musisz dodać specyfikację długości, jeśli n [var] char musisz przeciąć max_length na pół, jeśli jest to MAX, musisz zmień -1 na MAX itp.). W SQL Server 2012 ta część jest trochę łatwiejsza:
SELECT name, system_type_name, is_nullable FROM
sys.dm_exec_describe_first_result_set('select * from sys.objects', NULL, 0)
Wyniki:
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
Pisałem też o tym na blogu.
Prawdopodobnie jest to znacznie bliższe twojemu ukierunkowanemu CREATE TABLE
stwierdzeniu niż skomplikowane podejściesys.columns
, ale wciąż pozostaje wiele do zrobienia. Klucze, ograniczenia, opcje tekstu w wierszach, informacje o grupie plików, ustawienia kompresji, indeksy itp. To bardzo długa lista i jeszcze raz zasugeruję, abyś spojrzał na to narzędzie zewnętrzne, zamiast ryzykować powtórzenie - wykorzystał analogię, ponownie wymyślając koło.
To powiedziawszy, jeśli musisz to zrobić za pomocą kodu, ale możesz to zrobić poza SQL Server, możesz rozważyć SMO / PowerShell. Zobacz tę wskazówkę i metodę Scripter.Script () .
napisałem ten sp, aby automatycznie utworzyć schemat ze wszystkimi rzeczami, pk, fk, partycjami, ograniczeniami ...
WAŻNY!! przed wykonaniem
tutaj SP:
wykonać:
źródło
Może to być użycie młota pneumatycznego do wbicia gwoździa w ścianę, ale biorąc pod uwagę szeroki zakres pytania, myślę, że warto o tym wspomnieć.
Jeśli korzystasz z SQL Server 2012 SP4 +, 2014 SP2 + lub 2016 SP1 +, możesz użyć dźwigni,
DBCC CLONEDATABASE
aby utworzyć kopię bazy danych bez danych tylko do schematu. Jest to idealne rozwiązanie do generowania kompleksowych kopii schematu wielu tabel i może zmniejszyć potrzebę „automatyzacji” procesu zapętlania szeregu tabel, ale należy pamiętać, że wszystkie kopie tabel zostaną utworzone w nowej bazie danych tylko do odczytu .Te tabele będą zawierać klucze obce, klucze podstawowe, indeksy i ograniczenia. Będą również zawierać statystyki i dane z magazynu zapytań (chyba że określisz
NO_STATISTICS
iNO_QUERYSTORE
).Składnia jest następująca
Jest też kilka innych zastrzeżeń, o których Brent Ozar ma świetny post , ale wszystko naprawdę sprowadza się do tego, jak i dlaczego chcesz tworzyć kopie tabel, czy któraś z subtelności jest łamaczem, czy nie .
źródło
Możesz użyć polecenia „Generuj skrypt” w SQL Server Management Studio, aby uzyskać skrypt, który może utworzyć Twoją tabelę, w tym indeksy, wyzwalacze, klucze obce itp.
W SSMS
Następnie możesz edytować, aby uwzględnić tylko to, czego potrzebujesz w docelowej bazie danych.
źródło
Oto wersja oparta na wersji E.Mantovanelli w tym wątku. Rozwiązuje to problem polegający na tym, że unikalny indeks nie zawiera słowa kluczowego UNIQUE w skrypcie wynikowym. Dodaje również parametry, dzięki czemu można utworzyć tabelę bez indeksów nieklastrowanych lub można jedynie skryptować indeksy nieklastrowane. Używam tego do utworzenia tabeli stołu montażowego, załadowania, dodania indeksów nieklastrowanych, a następnie przełączenia tabeli, które pozwalają na szybsze ładowanie, a indeksy nie są pofragmentowane.
źródło
Możesz użyć tego skryptu, aby skopiować strukturę tabeli z kluczami obcymi, ale bez indeksów. Ten skrypt z wdziękiem obsługuje typy zdefiniowane przez użytkownika i kolumny obliczane.
Jeśli jesteś zainteresowany, możesz go znaleźć również na moim blogu: http://www.hansmichiels.com/2016/02/18/how-to-copy-a-database-table-structure-t-sql-scripting-series -s01e01 /
źródło
źródło