Gibt es eine einfache Möglichkeit, eine Datenbank SQL-Skriptdatei in eine Datei pro Objekt zu brechen?

StackOverflow https://stackoverflow.com/questions/4247238

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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top