Gibt es eine einfache Möglichkeit, eine Datenbank SQL-Skriptdatei in eine Datei pro Objekt zu brechen?
-
27-09-2019 - |
Frage
Ich habe die Ausgabe von SQL-Server-Tasks -> Generieren Scripts ... für alle Tabellen in der Datenbank auf einer Datei
.Gibt es eine einfache Möglichkeit, den einzelnen SQL-Skript in eine Datei pro Tabelle zu brechen?
Natürlich, wenn ich das Generieren laufen konnte Scripts Aufgabe mit der Datei pro Objekt ausgewählt Einstellung, würde ich nicht fragen diese.
Lösung
Mit Powershell. Ohne das Format der SQL-Datei zu wissen, diese oder auch nicht funktionieren. Es sollte zumindest gibt Ihnen einen Ausgangspunkt. Es beginnt Schreiben an die „table.sql“ Datei aber später benennt die Datei als tablename .sql
1. $lineNumber = 0 2. $inputFile = "test.sql" 3. foreach ($line in Get-Content $inputFile) { 4. if ($line -match "create table") { 5. $w = [regex]::Replace($line, "^.+\.\[(\w+)\].+$", '$1') 6. $outFile = "$w.sql" 7. $lineNumber = 1 8. } 9. if (($line -match "use \[dbaInventory\]") -and ($lineNumber -gt 0)) { 10. Move-Item -LiteralPath "table.sql" -Destination $outFile 11. } 12. $line | Out-file -FilePath table.sql -Append 13. } 14. Move-Item -LiteralPath "table.sql" -Destination $outFile
Ändern Sie Zeile 2 für was auch immer kombinierte SQL-Datei, die Sie derzeit haben und Linie 9 zu suchen, was auch immer Datenbanknamen zu Ihrem Skript geeignet ist.
Hier ist ein Beispiel der „test.sql“ Datei, die ich für den Test verwendet.
USE [dbaInventory] GO /****** Object: Table [dbo].[tableOne] Script Date: 11/22/2010 12:28:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[tableOne]( [colA] [smallint] NULL, [colB] [char](1) NULL, [colC] [decimal](10, 2) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO USE [dbaInventory] GO /****** Object: Table [dbo].[tableTwo] Script Date: 11/22/2010 12:28:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[tableTwo]( [col_A] [char](1) NULL, [col_B] [decimal](10, 2) NULL, [col_C] [smallint] NULL, CONSTRAINT [Pk_tableTwo] PRIMARY KEY CLUSTERED ( [col_A] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
Andere Tipps
Ausführen Task-> Generieren von Skripts Aufgabe. In der letzten Seite des Assistenten wählen Sie „Skript-Datei“ und wählen Sie ‚Datei pro Objekt‘. Sie müssen einen vorhandenen Ordner für die Ausgabe angeben.