<f{"id":171,"date":"2013-02-09T15:17:06","date_gmt":"2013-02-09T14:17:06","guid":{"rendered":"http:\/\/www.bernhard-krenz.de\/?p=171"},"modified":"2013-04-20T22:54:38","modified_gmt":"2013-04-20T21:54:38","slug":"sql-skriptdateien-aus-masterskript-aufrufen","status":"publish","type":"post","link":"https:\/\/www.bernhard-krenz.de\/?p=171","title":{"rendered":"SQL-Skriptdateien aus Masterskript aufrufen"},"content":{"rendered":"<p>Bei der Architektur einer Datenbank gilt es nach einer Testphase oder nach \u00c4nderungen 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\u00fchrt.<\/p>\n<p>Das Ausf\u00fchren der Skripte aus aus einer Datei erfolgt \u00fcber den Befehl\u00a0<a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/ms175046.aspx\" target=\"_blank\">xp_cmdshell<\/a>. Dieser macht nichts weiter, als einen Befehl an die Windows-Kommandozeile weiter zu erreichen. Der Befehl ist im Standardfall allerdings sicherheitsbeschr\u00e4nkt, weshalb die Konfiguration vorher ge\u00e4ndert werden muss.<\/p>\n<p>Folgende Schritte sind dazu notwendig:<\/p>\n<ol>\n<li>L\u00f6schen der Datenbank falls diese existiert<\/li>\n<li>Datenbank neu erstellen<\/li>\n<li>Berechtigung konfigurieren, um Skripte aus Dateien auszuf\u00fchren<\/li>\n<li>Konstanten deklarieren und initialisieren<\/li>\n<li>Skript-Dateien in eine tempor\u00e4re Tabelle einf\u00fcgen<\/li>\n<li>Diese Tabelle in einer Schleife durchlaufen und die Skripte aus den Dateien ausf\u00fchren<\/li>\n<\/ol>\n<p>\nSehen wir uns einige der Schritte im Detail an:<\/p>\n<p>Schritt 3:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n-- To allow advanced options to be changed.\r\nEXEC sp_configure 'show advanced options', 1\r\n\r\nGO\r\n\r\n-- To update the currently configured value for advanced options.\r\nRECONFIGURE\r\n\r\nGO\r\n\r\n-- To enable the feature.\r\nEXEC sp_configure 'xp_cmdshell', 1\r\n\r\nGO\r\n\r\n-- To update the currently configured value for this feature.\r\nRECONFIGURE\r\n<\/pre>\n<p>Mit diesem Schnipsel werden die erweiterten Berechtigungen f\u00fcr den xp_cmdshell-Befehl gesetzt.<\/p>\n<p><!--more--><\/p>\n<p>Schritt 6:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nDECLARE item_cursor CURSOR FOR\r\n\tSELECT FileName FROM @ScriptFiles\r\n\tOPEN item_cursor\r\n\tFETCH NEXT FROM item_cursor INTO @executionPath\r\n\tWHILE @@FETCH_STATUS = 0\r\n\tBEGIN\r\n\t\tSET @executionPath = 'sqlcmd -S ' + @serverName + ' -d ' + @dbName + ' -i &quot;' + @scriptsDirectory + @executionPath + '&quot;'\r\n\r\n\t\tEXEC xp_cmdshell @executionPath\r\n\r\n\t\tFETCH NEXT FROM item_cursor INTO @executionPath\r\n\tEND\r\nCLOSE item_cursor\r\nDEALLOCATE item_cursor\r\n<\/pre>\n<p>F\u00fcr die Schleife nutze ich einen Cursor um eine Tabelle zu durchlaufen. Denkbar ist nat\u00fcrlich auch die Umsetzung \u00fcber eine tempor\u00e4re Tabelle.<\/p>\n<p>In Zeile 7 wird der komplette Parameter f\u00fcr denn xp_cmdshell zusammengef\u00fcgt. Die zus\u00e4tzlichen Anf\u00fchrungszeichen sorgen daf\u00fcr, dass Pfade mit Leerzeichen fehlerfrei ausgef\u00fchrt werden.<\/p>\n<p>Das komplette Skript kann hier heruntergeladen werden: <a title=\"Masterskript f\u00fcr SQL-Dateien\" href=\"\/files\/20130209_database.zip\">Masterskript f\u00fcr SQL-Dateien<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei der Architektur einer Datenbank gilt es nach einer Testphase oder nach \u00c4nderungen oftmals diese komplett neu aus den beteiligten<a href=\"https:\/\/www.bernhard-krenz.de\/?p=171\" class=\"searchmore\">Weiterlesen&hellip;<\/a><\/p>\n<div class=\"clr\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[11],"_links":{"self":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/171"}],"collection":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=171"}],"version-history":[{"count":12,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/171\/revisions"}],"predecessor-version":[{"id":180,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/171\/revisions\/180"}],"wp:attachment":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}