Skrypt całej bazy danych SQL-Server

95

Czy istnieje sposób, aby uzyskać skrypty wszystkich tabel, procesów i innych obiektów z bazy danych? Wiem, że istnieje opcja skryptu bazy danych, ale dostałem tylko jakiś rodzaj skryptu najwyższego poziomu, na pewno nie skrypt do tworzenia wszystkich tabel, procs, udfs, .etc.

PositiveGuy
źródło
6
Oznaczył go SQL Server 2008, więc zakładam, że właśnie tego używa.
Colin Mackay,
1
Czy to nie powinno iść do serverfault.com?
Salamander 2007,

Odpowiedzi:

163

Z Management Studio Kliknij prawym przyciskiem myszy swoją bazę danych. Zadania -> Generuj skrypty.

Że należy to zrobić.

Chris Brandsma
źródło
2
Inną opcją jest użycie SQL SMO i skryptu programowego (tj. Jeśli wymagane jest regularne wykonywanie skryptów)
RobS,
Czy istnieje sposób skonfigurowania skryptu, który to zrobi, aby ustawienia były zawsze takie same, niezależnie od tego, kto go uruchamia? Przewiduję, że ludzie z naszego zespołu programistów będą nadpisywać ten plik za każdym razem z innymi ustawieniami ...
Joe Phillips
@Joe, wybrałbym trasę, o której mówi RobS. Powinieneś być w stanie to zrobić za pomocą PowerShell. W przeciwnym razie zacznij szukać narzędzi RedGate lub Visual Studio Team Systems z Database Developer.
Chris Brandsma
7
Domyślnie nie skryptuje danych. W Opcjach tabeli / widoku wybierz „Dane skryptu -> Prawda”. Inną przydatną opcją jest „Script Drop -> True”
Stephen Hosking,
1
Wygenerowany skrypt nie będzie zawierał żadnych informacji o zestawieniu kolumn, chyba że wybrałeś ostatnią opcję w menu Extra> Opcje> Generowanie skryptu. W języku niemieckim dostępna jest opcja „Sortierung einschließen”. Nawet większość z tych opcji jest uwzględniona w kreatorze generującym skrypt, ale ta nie jest (SQL Server 2008). Naprawdę musisz wybrać opcję przed wywołaniem kreatora.
Olivier Faucheux
14

Napisałem narzędzie wiersza poleceń open source o nazwie SchemaZen, które to robi. Jest znacznie szybszy niż pisanie skryptów ze studia zarządzania, a jego wyjście jest bardziej przyjazne dla kontroli wersji. Obsługuje skrypty zarówno schematu, jak i danych.

Aby wygenerować skrypty, uruchom:

skrypt schemazen.exe - serwer lokalny host - baza danych bazy danych - katalog skryptów c: \ katalog

Następnie, aby odtworzyć bazę danych ze skryptów, uruchom:

schemazen.exe create --server localhost --database db --scriptDir c: \ katalog
Seth Reno
źródło
Cześć, chcę uzyskać zapytanie SQL z mojej lokalnej bazy danych utworzonej w programie Visual Studio. Jak mogę to zrobić za pomocą tego narzędzia? Muszę użyć kierunku pliku .sdf lub jak? dzięki.
Karlo A. López
Jest to kompaktowy plik SQL DataBase.
Karlo A. López
1
ŚWIĘTY ZŁÓŻ TO SZYBKO I WSPANIAŁE.
ConstantineK
1
@hobs Cieszę się, że okazało się przydatne. : D
Seth Reno
1
@SethReno uszkodził indeksy sys na moim db = SMO nie może niczego skrypty, twój skrypt może, więc w zasadzie zaoszczędził mi mnóstwo czasu na ręcznym robieniu bzdur. BTW, imponująco szybka inżynieria wsteczna wszystkiego, na przykład 1000x szybciej niż SSMS i wydaje się szybsza niż sama SMO (nie tylko ze względu na czas uruchamiania).
ConstantineK
4

Napisałem narzędzie do tego zadania, SMOscript .

Generowanie skryptów jest wykonywane przez bibliotekę SMO i obsługuje nowe typy obiektów w SQL 2005 i 2008.

devio
źródło
Hmm, zainstalowałem twoją aplikację smo na moim 64-bitowym systemie Vista. Instalacja powiodła się, ale nie widzę pozycji w katalogu moich programów ani na liście Wszystkie programy
PositiveGuy,
3

Skończyło się na tym, że użyliśmy kombinacji generowania skryptów SSMS do wyodrębnienia schematu i danych, a następnie skorzystaliśmy z naszego własnego narzędzia bazy danych, które umożliwia analizowanie słów kluczowych i zastępowanie tokenów w skryptach. Zapewnia również, że skrypty są stosowane tylko raz.

Czemu?

  • Musimy wspierać instalacje na SQL Server 2000, 2005 i 2008, a między wersjami są zmiany w typach danych, np. 2005+ mają nvarchar (max), podczas gdy 2000 obsługuje tylko ntext. Dlatego nasze skrypty używają tokenu i na podstawie wyboru db zastępują go odpowiednim typem.
  • Wykonanie niektórych skryptów wymaga czasu oczekiwania po wykonaniu, np. Stwierdziliśmy, że jeśli nie odczekałeś kilku sekund po utworzeniu nowej bazy danych za pomocą skryptu, SQL Server może czasami zawieść (ponieważ nie miał czasu na utworzenie bazy danych pliki), kiedy tworzył tabele itp.
  • Chcieliśmy zachować historię tego, jakie skrypty były wykonywane i kiedy.
  • Chcieliśmy pozwolić naszemu instalatorowi Wix MSI na określenie parametrów połączenia i danych uwierzytelniających, i potrzebowaliśmy jakiegoś sposobu, aby przekazać je do skryptów, więc ponownie, używając tokenów i pewnej logiki warunkowej.

Przykładowy skrypt (zredagowany dla zwięzłości)

-- Sleep: 5 
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO

EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO

USE [$Database$]
GO

IF '1'!='$IntegratedSecurity$'
BEGIN
    CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
    CREATE USER [$User$] FOR LOGIN [$Login$]
    EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO
si618
źródło
1

Polecam przyjrzenie się pakietowi RedGate SQL. To nie jest darmowe, ale było na tyle przydatne, że było warte swojej ceny.

Barry Hurt
źródło
1

Wystarczy spojrzeć na dane tabeli, aby wyświetlić całą zawartość danych tabeli w Management Studio 2012 i 2014, jest ona nieco ukryta, ale znalazłem opcję po pewnym przejrzeniu:

  1. Kliknij prawym przyciskiem myszy plik db
  2. Wybierz „Zadania”> „Generuj skrypty ...”
  3. W „Ustaw opcje skryptów” kliknij „Zaawansowane”
  4. W sekcji „Ogólne” ustaw „Typy danych do skryptu” na wartość „prawda” (znajduje się na dole grupy „Ogólne”)
Cameron Forward
źródło
0

Jeśli potrzebujesz zrobić to programowo, możesz użyć biblioteki SQL DMO (OLE) w stosunku do SQL Server 2000, ale bardziej prawdopodobne jest, że będziesz chciał użyć biblioteki SQL SMO (natywne biblioteki .NET) przeciwko SQL Server 2005 i nowszym.

Obie te biblioteki są integralną częścią instalacji narzędzi administracyjnych programu SQL Server.

Dzieje się tak w przypadku, gdy wygenerowanie pełnego skryptu bazy danych z SQL Server Management Studio jest niewystarczające.

poliglota
źródło