Bei der Architektur einer Datenbank gilt es nach einer Testphase oder nach Änderungen oftmals diese komplett neu aus den beteiligten Skripten zu erzeugen. Um zu viel manuelle Arbeit zu vermeiden erzeuge ich mir dazu ein weiteres Skript, welches neben der Installation der Datenbank auch alle beteiligten Skripte in fest definierter Reihenfolge ausführt.
Das Ausführen der Skripte aus aus einer Datei erfolgt über den Befehl xp_cmdshell. Dieser macht nichts weiter, als einen Befehl an die Windows-Kommandozeile weiter zu erreichen. Der Befehl ist im Standardfall allerdings sicherheitsbeschränkt, weshalb die Konfiguration vorher geändert werden muss.
Folgende Schritte sind dazu notwendig:
- Löschen der Datenbank falls diese existiert
- Datenbank neu erstellen
- Berechtigung konfigurieren, um Skripte aus Dateien auszuführen
- Konstanten deklarieren und initialisieren
- Skript-Dateien in eine temporäre Tabelle einfügen
- Diese Tabelle in einer Schleife durchlaufen und die Skripte aus den Dateien ausführen
Sehen wir uns einige der Schritte im Detail an:
Schritt 3:
-- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE
Mit diesem Schnipsel werden die erweiterten Berechtigungen für den xp_cmdshell-Befehl gesetzt.
Schritt 6:
DECLARE item_cursor CURSOR FOR SELECT FileName FROM @ScriptFiles OPEN item_cursor FETCH NEXT FROM item_cursor INTO @executionPath WHILE @@FETCH_STATUS = 0 BEGIN SET @executionPath = 'sqlcmd -S ' + @serverName + ' -d ' + @dbName + ' -i "' + @scriptsDirectory + @executionPath + '"' EXEC xp_cmdshell @executionPath FETCH NEXT FROM item_cursor INTO @executionPath END CLOSE item_cursor DEALLOCATE item_cursor
Für die Schleife nutze ich einen Cursor um eine Tabelle zu durchlaufen. Denkbar ist natürlich auch die Umsetzung über eine temporäre Tabelle.
In Zeile 7 wird der komplette Parameter für denn xp_cmdshell zusammengefügt. Die zusätzlichen Anführungszeichen sorgen dafür, dass Pfade mit Leerzeichen fehlerfrei ausgeführt werden.
Das komplette Skript kann hier heruntergeladen werden: Masterskript für SQL-Dateien
20. April 2013, 22:58 Uhr
Wer Probleme mit der Leseberechtigung der Skriptdateien hat, muss die Verzeichnis-Berechtigung entsprechend einstellen.
Im einfachsten Fall kann die Berechtigung für die „Jeder“-Gruppe gesetzt werden.