Utwórz skrypt SQL, który utworzy bazę danych i tabele

102

Mam bazę danych SQL i tabele, które chciałbym zreplikować na innym serwerze SQL. Chciałbym stworzyć skrypt SQL, który tworzy bazę danych i tabele w jednym skrypcie.

Mogę utworzyć skrypt „Utwórz” za pomocą programu SQL Management Studio dla każdego przypadku (bazy danych i tabel), ale chciałbym wiedzieć, czy wystarczy połączenie obu skryptów „Utwórz” w jeden skrypt.

Dzięki.

Tony
źródło
26
czy mógłbyś zmienić zaakceptowaną odpowiedź?
skolima
1
@skolima zgodził się, zaakceptowana odpowiedź (przez Claytona) ostatecznie przyniesie wynik, ale odpowiedź CJM jest znacznie szybsza
elmer007

Odpowiedzi:

18

W SQL Server Management Studio możesz kliknąć prawym przyciskiem myszy bazę danych, którą chcesz replikować, i wybrać opcję „Script Database as”, aby narzędzie utworzyło odpowiedni plik SQL do replikacji tej bazy danych na innym serwerze. Możesz powtórzyć ten proces dla każdej tabeli, którą chcesz utworzyć, a następnie scalić pliki w jeden plik SQL. Nie zapomnij dodać instrukcji using po utworzeniu bazy danych, ale przed utworzeniem jakiejkolwiek tabeli.

W nowszych wersjach programu SQL Server można to uzyskać w jednym pliku w programie SSMS.

  1. Kliknij prawym przyciskiem myszy bazę danych.
  2. Zadania
  3. Generuj skrypty

Spowoduje to uruchomienie kreatora, w którym można skryptować całą bazę danych lub tylko jej części. Wydaje się, że nie ma na to sposobu w języku T-SQL.

Generuj skrypty SQL Server

Clayton
źródło
183
Przewijaj dalej ... Metoda CJM jest o 99,99999% lepsza
ewitkows
Odpowiedź CJM to wciąż za mało. Po zastosowaniu metody CJM należy zastosować również metodę Shawny Jacobs.
Andrzej Martyna
W każdym razie, aby to zrobić, to na przykład standardowy SQL dla mysql?
Benjamin Goodacre
379

Chociaż odpowiedź Claytona doprowadzi Cię tam (w końcu), w SQL2005 / 2008 / R2 / 2012 masz znacznie łatwiejszą opcję:

Kliknij prawym przyciskiem myszy bazę danych, wybierz, Tasksa następnie Generate Scripts, co spowoduje uruchomienie Kreatora skryptów. Pozwala to na wygenerowanie pojedynczego skryptu, który może odtworzyć pełną bazę danych, w tym tabelę / indeksy i ograniczenia / procedury składowane / funkcje / użytkownicy / itp. Istnieje wiele opcji, które można skonfigurować, aby dostosować wyjście, ale większość z nich jest oczywista.

Jeśli jesteś zadowolony z domyślnych opcji, możesz wykonać całą pracę w ciągu kilku sekund.

Jeśli chcesz odtworzyć dane w bazie danych (jako seria INSERTS), polecam również SSMS Tools Pack (bezpłatna wersja SQL 2008, płatna wersja SQL 2012).

CJM
źródło
5
To jest doskonałe, właśnie to zrobiłem i zaoszczędziłem mnóstwo czasu.
Bill Sambrone,
@CJM Myślę, że PRAWIE cię kocham! :-P
Piero Alberto
Wykonałem dokładnie te kroki, ale nadal otrzymuję absolutnie mnóstwo błędów i nie mogę ich poprawić. Jakaś pomoc?
user1789573
Proponuję zadać własne pytanie w tej sprawie - pamiętaj, aby zamieścić szczegółowe informacje o podjętych krokach i otrzymanych błędach.
CJM
@ user1789573 - jak napisała Shawna Jacobs - SSMS nie dba o zależności (szkoda SSMS devteam!), więc będziesz miał mnóstwo błędów „z założenia”. Podążaj za Shawną Jacobs, aby odpowiedzieć na tę słabość SSMS.
Andrzej Martyna
9

Doskonałe wyjaśnienie można znaleźć tutaj: Generuj skrypt w SQL Server Management Studio

Dzięki uprzejmości Ali Issa Oto, co musisz zrobić:

  1. Kliknij prawym przyciskiem myszy bazę danych (nie tabelę) i wybierz zadania -> generuj skrypty
  2. Dalej -> wybierz żądaną tabelę / tabele (z wybranych obiektów bazy danych)
  3. Dalej -> kliknij zaawansowane -> typy danych do skryptu = schemat i dane

Jeśli chcesz stworzyć skrypt, który po prostu generuje tabele (bez danych), możesz pominąć zaawansowaną część instrukcji!

HelloImKevo
źródło
7

Nie jestem pewien, dlaczego SSMS nie bierze pod uwagę kolejności wykonania, ale po prostu nie. Nie jest to problem w przypadku małych baz danych, ale co, jeśli baza danych zawiera 200 obiektów? W takim przypadku kolejność wykonywania ma znaczenie, ponieważ nie jest łatwo przejść przez wszystkie te elementy.

W przypadku nieuporządkowanych skryptów generowanych przez SSMS możesz śledzić

a) Wykonaj skrypt (niektóre obiekty zostaną wstawione trochę przyzwyczajenie, będą błędy)

b) Usuń wszystkie obiekty ze skryptu, które zostały dodane do bazy danych

c) Wróć do a), aż wszystko zostanie ostatecznie wykonane

Alternatywną opcją jest użycie narzędzia innej firmy, takiego jak ApexSQL Script lub innych narzędzi już wspomnianych w tym wątku ( pakiet narzędzi SSMS, Red Gate i inne).

Wszystko to zadba o Twoje zależności i pozwoli Ci zaoszczędzić jeszcze więcej czasu.

Shawna Jacobs
źródło
1

Tak, możesz dodać dowolną liczbę instrukcji SQL do jednego skryptu. Jedna uwaga: liczy się kolejność. Nie możesz WSTAWIĆ do tabeli, dopóki jej nie utworzysz; nie możesz ustawić klucza obcego, dopóki klucz podstawowy nie zostanie włożony.

duffymo
źródło