Jak zautomatyzować zadanie "generowanie skryptów" w SQL Server Management Studio 2008?

Chciałbym zautomatyzować generowanie skryptów w SQL Server Management Studio 2008.

Teraz to co robię to:

  • Kliknij prawym przyciskiem myszy na mojej bazie danych, zadania, " Generuj Skrypty..."
  • ręcznie wybierz wszystkie potrzebne opcje eksportu i naciśnij Wybierz wszystko na karcie "wybierz obiekt"
  • Wybierz folder eksportu
  • W końcu naciśnij przycisk "Zakończ"

Czy jest sposób na automatyzację tego zadania?

Edit: chcę wygenerować tworzenie skrypty, nie zmieniaj skryptów.

Author: Brann, 2009-01-27

13 answers

To, o czym mówi Brann z pakietu Visual Studio 2008 SP1 Team Suite, to wersja 1.4 Kreatora publikowania baz danych. Jest zainstalowany z sql server 2008 (może tylko profesjonalny?) do \Program Files \ Microsoft SQL Server\90 \ Tools \ Publishing \ 1.4. Połączenie VS Z server explorer po prostu to wywołuje. Możesz uzyskać tę samą funkcjonalność za pomocą wiersza poleceń:

sqlpubwiz help script

Nie wiem czy v1. 4 ma te same problemy co v1.1 (Użytkownicy są konwertowani na role, ograniczenia są nie jest tworzone w odpowiedniej kolejności), ale nie jest to dla mnie rozwiązanie, ponieważ nie skryptuje obiektów do różnych plików, jak opcja zadania - > Generuj Skrypty w SSMS robi. Obecnie używam zmodyfikowanej wersji Scriptio (używa MS SMO API), aby działać jako ulepszony zamiennik Kreatora publikowania baz danych (sqlpubwiz.exe). Obecnie nie można go skryptować z linii poleceń, Mogę dodać ten wkład w przyszłości.

Scriptio został pierwotnie opublikowany na blogu Billa Graziano, ale został następnie wydany CodePlex przez Bill i zaktualizowany przez innych. Przeczytaj dyskusję, aby zobaczyć, jak skompilować do użytku z SQL Server 2008.

Http://scriptio.codeplex.com/

EDIT: od tego czasu zacząłem używać produktu RedGate SQL Compare do tego celu. Jest to bardzo miły zamiennik dla wszystkich, że SQL publishing wizard powinien być. Wybierz bazę danych, kopię zapasową lub migawkę jako źródło, a folder jako lokalizację wyjściową i ładnie zrzuca wszystko do struktura folderów. Tak się składa, że jest to ten sam format, którego używa ich inny produkt, SQL Source Control.

 31
Author: noobish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-06 19:53:01

Sqlpubwiz ma bardzo ograniczone opcje w porównaniu do generowania skryptów w SSMS. Natomiast opcje dostępne z SMO prawie dokładnie pasują do tych w SSMS, co sugeruje, że prawdopodobnie jest to nawet ten sam kod. (Mam nadzieję, że MS nie napisała tego dwa razy!) Istnieje kilka przykładów na MSDN, takich jak ten , które pokazują tabele skryptów jako poszczególne obiekty. Jeśli jednak chcesz, aby wszystko było napisane poprawnie ze schematem' full 'zawierającym' DRI ' (deklaratywna Referencjalna integralność) obiekty takie jak klucze obce, a następnie tabele skryptowe nie działają poprawnie. Okazało się, że trzeba zebrać wszystkie urny i przekazać je scripterowi jako tablicę. Ten kod, zmodyfikowany na podstawie przykładu, działa dla mnie (choć śmiem twierdzić, że można go uporządkować i skomentować nieco więcej): {]}

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Sdk.Sfc;
...
// Connect to the local, default instance of SQL Server. 
Server srv = new Server();

// Reference the database.  
Database db = srv.Databases["YOURDBHERE"];

Scripter scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;
scrp.Options.Indexes = true;   // To include indexes
scrp.Options.DriAllConstraints = true;   // to include referential constraints in the script
scrp.Options.Triggers = true;
scrp.Options.FullTextIndexes = true;
scrp.Options.NoCollation = false;
scrp.Options.Bindings = true;
scrp.Options.IncludeIfNotExists = false;
scrp.Options.ScriptBatchTerminator = true;
scrp.Options.ExtendedProperties = true;

scrp.PrefetchObjects = true; // some sources suggest this may speed things up

var urns = new List<Urn>();

// Iterate through the tables in database and script each one   
foreach (Table tb in db.Tables)
{
    // check if the table is not a system table
    if (tb.IsSystemObject == false)
    {
        urns.Add(tb.Urn);
    }
}

// Iterate through the views in database and script each one. Display the script.   
foreach (View view in db.Views)
{
    // check if the view is not a system object
    if (view.IsSystemObject == false)
    {
        urns.Add(view.Urn);
    }
}

// Iterate through the stored procedures in database and script each one. Display the script.   
foreach (StoredProcedure sp in db.StoredProcedures)
{
    // check if the procedure is not a system object
    if (sp.IsSystemObject == false)
    {
        urns.Add(sp.Urn);
    }
}

StringBuilder builder = new StringBuilder();
System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
foreach (string st in sc)
{
    // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
    // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
    builder.AppendLine(st);
    builder.AppendLine("GO");
}

return builder.ToString();
 36
Author: OlduwanSteve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-25 17:27:06

Napisałem otwarte narzędzie wiersza poleceń o nazwie SchemaZen , które to robi. Jest to znacznie szybsze niż skrypty z management studio, a jego wyjście jest bardziej przyjazne dla kontroli wersji. Obsługuje skrypty zarówno schematu, jak i danych.

Aby wygenerować Skrypty Uruchom:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir

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

schemazen.exe create --server localhost --database db --scriptDir c:\somedir
 13
Author: Seth Reno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 14:48:52

Możesz użyć SQL Server Management Object (SMO) do automatyzacji zadań zarządzania SQL Server 2005, w tym generowania skryptów: http://msdn.microsoft.com/en-us/library/ms162169.aspx .

 12
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 14:41:51

Jeśli jesteś deweloperem, zdecydowanie wybierz SMO. Oto link do klasy Scripter, która jest twoim punktem wyjścia:

Scripter Class

 7
Author: Ryan Lundy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 15:01:46

Nie widzę PowerShella z SQLPSX wspomnianym w żadnej z tych odpowiedzi... Osobiście nie grałem z nim, ale wygląda pięknie prosty w użyciu i idealnie nadaje się do tego typu zadań automatyzacji, z zadaniami takimi jak:

Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter

(ref: http://www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100 )

Strona projektu: http://sqlpsx.codeplex.com/

Główną zaletą tego podejścia jest to, że łączy w sobie konfigurowalność / możliwość bezpośredniego korzystania z SMO, z wygodą i konserwacją za pomocą prostego istniejącego narzędzia, takiego jak Kreator publikowania baz danych.

 7
Author: Tao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-13 06:55:46

W Tools > Options > Designers > table and Database Designers jest opcja 'Auto generate change scripts', która wygeneruje jeden dla każdej zmiany, którą dokonasz w momencie jej zapisania.

 4
Author: John Sheehan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 14:27:24

Możesz to zrobić za pomocą kodu T-SQL przy użyciu tabel INFORMATION_SCHEMA.

Istnieją również narzędzia innych firm - Lubię skrypt Apex SQL za dokładnie to, o czym mówisz. Uruchamiam go całkowicie z linii poleceń.

 3
Author: Cade Roux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 14:36:13

Jeśli chcesz skorzystać z rozwiązania firmy Microsoft możesz wypróbować: Microsoft SQL Server Database Publishing Wizard 1.1

Http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

Tworzy proces wsadowy, który można uruchomić w każdej chwili, aby odbudować Skrypty.

 2
Author: Glennular,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 14:57:44

Używałem DB Comparer - jego darmowy i bez zamieszania skrypt cały DB i można porównać do innego DB, a także produkować skrypt Diff . Doskonały do tworzenia scenariuszy zmian produkcyjnych. http://www.dbcomparer.com/

 2
Author: MartinC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 08:30:14

Istnieje również to proste narzędzie wiersza poleceń, które zbudowałem dla mojego needs.
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

Potrafi wyeksportować cały db i próbuje wyeksportować zaszyfrowane obiekty. Wszystko jest przechowywane w folderach i oddzielnych plikach sql dla łatwego porównania plików.

Kod jest również dostępny na GitHubie.

 1
Author: George Kosmidis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-27 14:04:32

From Visual Studio 2008 SP1 TeamSuite:

Na karcie Server Explorer / Data Connections znajduje się narzędzie publish to provider, które działa tak samo jak "Microsoft SQL Server Database Publishing Wizard", ale które jest kompatybilne z MS SQL Server 2008.

 0
Author: Brann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-27 15:12:18

Używam VS 2012(dla DBs na MSSQL Server 2008) baza danych porównania ma możliwość zapisania, porównanie i opcje. To jest zasadniczo to, jakie są ustawienia dostawy. Następnie możesz wykonać aktualizację lub wygenerować skrypt.

Po prostu uważam, że trochę niezręcznie jest załadować go później z pliku (przeciągnij i upuść z Eksploratora windows), ponieważ nie widzę pliku w Eksploratorze rozwiązań.

 0
Author: zhrist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-07 07:44:21