it-swarm.com.de

Wie kann ich die Task "Skripts generieren" in SQL Server Management Studio 2008 automatisieren?

Ich möchte die Skriptgenerierung in SQL Server Management Studio 2008 automatisieren.

Im Moment mache ich:

  • Klicken Sie mit der rechten Maustaste auf meine Datenbank, Aufgaben, "Skripts generieren ...".
  • wählen Sie manuell alle Exportoptionen aus, die Sie benötigen, und klicken Sie auf der Registerkarte "Objekt auswählen" auf Alle auswählen
  • Wählen Sie den Exportordner
  • Drücken Sie eventuell die Schaltfläche "Fertig stellen"

Gibt es eine Möglichkeit, diese Aufgabe zu automatisieren?

Edit: Ich möchte creation scripts generieren, nicht Skripte ändern.

88
Brann

Was Brann in der Visual Studio 2008 SP1 Team Suite erwähnt, ist Version 1.4 des Database Publishing-Assistenten. Es wurde mit SQL Server 2008 (möglicherweise nur professionell?) Unter\Programme\Microsoft SQL Server\90\Tools\Publishing\1.4 installiert. Der VS-Aufruf vom Server-Explorer ruft dies einfach auf. Sie können dieselbe Funktionalität über die Befehlszeile wie folgt erreichen:

sqlpubwiz help script

Ich weiß nicht, ob Version 1.4 die gleichen Probleme aufweist wie Version 1.1 (Benutzer werden in Rollen konvertiert, Einschränkungen werden nicht in der richtigen Reihenfolge erstellt), aber es ist keine Lösung für mich, da sie keine Skriptobjekte enthält auf andere Dateien, wie dies bei der Task-> Script-Option in SSMS der Fall ist. Ich verwende derzeit eine modifizierte Version von Scriptio (verwendet die MS SMO-API), um den Datenbank-Veröffentlichungs-Assistenten (sqlpubwiz.exe) zu ersetzen. Es ist derzeit nicht von der Befehlszeile aus skriptfähig, ich könnte diesen Beitrag in der Zukunft hinzufügen.

Scriptio wurde ursprünglich auf dem Blog von Bill Graziano veröffentlicht, wurde jedoch anschließend von Bill für CodePlex veröffentlicht und von anderen aktualisiert. Lesen Sie die Diskussion, um zu erfahren, wie Sie zur Verwendung mit SQL Server 2008 kompilieren.

http://scriptio.codeplex.com/

BEARBEITEN: Ich habe seitdem mit dem SQL Compare-Produkt von RedGate angefangen. Es ist ein sehr schöner Ersatz für alles, was der SQL-Veröffentlichungsassistent hätte sein sollen. Sie wählen eine Datenbank, ein Backup oder einen Schnappschuss als Quelle und einen Ordner als Ausgabepfad aus, und es speichert alles in einer Ordnerstruktur. Es ist das gleiche Format, das auch ihr anderes Produkt, SQL Source Control, verwendet.

31
noobish

SqlPubwiz hat im Vergleich zur Skriptgenerierung in SSMS sehr eingeschränkte Optionen. Im Gegensatz dazu stimmen die Optionen mit SMO fast genau mit denen in SSMS überein, was darauf schließen lässt, dass es sich wahrscheinlich sogar um denselben Code handelt. (Ich würde hoffen, dass MS es nicht zweimal geschrieben hat!) Es gibt einige Beispiele auf MSDN wie this , die Skripttabellen als einzelne Objekte zeigen. Wenn Sie jedoch alles mit einem "vollständigen" Schema, das "DRI" (Declarative Referential Integrity) -Objekte wie Fremdschlüssel enthält, ein korrektes Skript erstellen möchten, werden die Abhängigkeiten nicht durch das Scripting von Tabellen einzeln gelöst. Ich habe festgestellt, dass es notwendig ist, alle URNs zu sammeln und dem Scripter als Array zu übergeben. Dieser Code, der aus dem Beispiel modifiziert wurde, funktioniert für mich (obwohl ich es wagen könnte, dass Sie ihn aufräumen und etwas mehr kommentieren könnten):

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();
38
OlduwanSteve

Ich habe ein Open Source-Befehlszeilenprogramm namens SchemaZen geschrieben, das dies tut. Es ist viel schneller als das Scripting von Management Studio und die Ausgabe ist mehr für die Versionskontrolle geeignet. Es unterstützt sowohl Skripts als auch Daten. 

So generieren Sie Skripts:

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

Anschließend erstellen Sie die Datenbank anhand der ausgeführten Skripts neu:

schemazen.exe create --server localhost --database db --scriptDir c:\somedir
13
Seth Reno

Sie können das SQL Server-Verwaltungsobjekt (SMO) verwenden, um SQL Server 2005-Verwaltungsaufgaben einschließlich der Generierung von Skripts zu automatisieren:  http://msdn.Microsoft.com/en-us/library/ms162169.aspx.

12
Joe

Ich sehe keine Powershell mit SQLPSX in einer dieser Antworten erwähnt ... Ich persönlich habe nicht damit gespielt, aber es sieht einfach aus und ist ideal für diese Art von Automatisierungsaufgaben geeignet, mit Aufgaben wie:

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.sqlserverc.com/de/Forums/Topic1167710-1550-1.aspx#bm1168100 )

Projektseite: http://sqlpsx.codeplex.com/

Der Hauptvorteil dieses Ansatzes besteht darin, dass er die Konfigurierbarkeit/Anpassbarkeit der direkten Verwendung von SMO mit der Bequemlichkeit und Wartbarkeit der Verwendung eines einfachen vorhandenen Tools wie dem Database Publishing Wizard kombiniert.

7
Tao

Wenn Sie ein Entwickler sind, gehen Sie auf jeden Fall mit SMO. Hier ist ein Link zur Scripter-Klasse, die Ihren Ausgangspunkt darstellt:

Scripter-Klasse

7
Ryan Lundy

Unter Extras> Optionen> Designer> Tabellen- und Datenbankdesigner gibt es eine Option für 'Änderungsskripts automatisch generieren', die für jede Änderung, die Sie zum Zeitpunkt des Speicherns vornehmen, eine generiert.

4
John Sheehan

Sie können dies mit T-SQL-Code unter Verwendung der INFORMATION_SCHEMA-Tabellen tun.

Es gibt auch Tools von Drittanbietern - Ich mag Apex SQL Script genau für die Verwendung, von der Sie sprechen. Ich führe es vollständig von der Befehlszeile aus.

3
Cade Roux

Wenn Sie eine Microsoft-Lösung möchten, können Sie Folgendes versuchen: Microsoft SQL Server Database Publishing Wizard 1.1

http://www.Microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=de

Es wird ein Stapelprozess erstellt, den Sie jederzeit ausführen können, wenn Sie die Skripts neu erstellen möchten.

2
Glennular

Ich habe DB Comparer verwendet - es ist ein kostenloses und unkompliziertes Skript für die gesamte DB und kann mit einer anderen DB verglichen werden und auch ein Diff-Skript erstellen. Hervorragend für Änderungsskripten für die Entwicklung von Produktion http://www.dbcomparer.com/

2
MartinC

Es gibt auch dieses einfache Befehlszeilentool, das ich für meine Bedürfnisse baue.
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

Es kann eine gesamte Datenbank exportieren, und es wird versucht, verschlüsselte Objekte zu exportieren. Alles wird in Ordnern und separaten SQL-Dateien für den einfachen Dateivergleich gespeichert. 

Code ist auch auf Github verfügbar.

1
George Kosmidis

Ich verwende VS 2012 (für DBs unter MSSQL Server 2008). Compare database hat eine Option zum Speichern, den Vergleich und die Optionen. Dies sind im Wesentlichen Ihre Einstellungen für die Lieferung. Danach können Sie ein Update durchführen oder ein Skript generieren.

Ich finde es einfach etwas umständlich, es später aus der Datei zu laden (Drag & Drop aus dem Windows Explorer), da ich die Datei nicht im Lösungs-Explorer sehen kann.

0
zhrist

Von Visual Studio 2008 SP1 TeamSuite:

Auf der Registerkarte Server-Explorer/Datenverbindungen befindet sich ein Tool zum Veröffentlichen beim Anbieter, das dasselbe tut wie der "Microsoft SQL Server-Assistent zum Veröffentlichen von Datenbanken", der jedoch mit MS SQL Server 2008 kompatibel ist.

0
Brann

Verwenden Sie new SQL Server-Befehlszeilentools, um T-SQL-Skripts zu generieren und Dynamic Management Views zu überwachen.

Arbeitete für mich wie Charme. Es ist ein neues Python-basiertes Tool von Microsoft, das von der Befehlszeile aus ausgeführt wird. Alles funktioniert wie auf der Microsoft-Seite beschrieben (siehe Link unten). Arbeitete für mich mit dem SQL 2012-Server.

Sie installieren es mit pip:

$ pip install mssql-scripter

Befehlsparameterübersicht wie üblich mit h für Hilfe:

mssql-scripter -h

Hinweis: Wenn Sie sich über Windows-Authentifizierung bei SQL-Server anmelden, müssen Benutzername und Kennwort einfach weggelassen werden.

https://cloudblogs.Microsoft.com/sqlserver/2017/05/17/try-new-sql-server-command-line-toolss-zu-generate-t-sql-scripts-und-monitor-dynamic- Management-Ansichten/

0
matthhias