2010-11-22 9 views
1

データベースのすべてのテーブルに対して、SQL Serverタスク - >スクリプトの生成...という出力が1つのファイルにあります。データベースSQLスクリプトファイルをオブジェクトごとに1つのファイルに分割する簡単な方法はありますか?

テーブルごとに1つのSQLスクリプトを1つのファイルに分割する簡単な方法はありますか?

もちろん、[オブジェクトごとのファイル]設定を選択して[スクリプトの生成]タスクを実行できる場合は、これを尋ねることはありません。

答えて

0

PowerShellを使用する。 SQLファイルの形式を知らなくても、これは動作しても動作しなくてもかまいません。それは少なくともあなたに出発点を与えるべきです。それはどのようなデータベース名を探すために変更して、あなたが現在持っているどんな組み合わせたSQLファイルの2行目と9行目がある

 
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 

.SQL

を「table.sql」ファイルへの書き込みを開始しますが、後で テーブル名としてファイルの名前を変更しますあなたのスクリプトにふさわしい

私がテストに使用した "test.sql"ファイルのサンプルです。

 
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 
+0

チャームのように働いた。ありがとう。 – mikemerce

2

タスクの実行 - >スクリプトの生成タスク。最終的なウィザードページで、「ファイルへのスクリプト」を選択し、「オブジェクトごとのファイル」を選択します。出力には既存のフォルダーを指定する必要があります。

+0

私は質問では、スクリプトの生成タスクを再実行できませんでした。しかし、ありがとう。 – mikemerce

関連する問題