データベースのすべてのテーブルに対して、SQL Serverタスク - >スクリプトの生成...という出力が1つのファイルにあります。データベースSQLスクリプトファイルをオブジェクトごとに1つのファイルに分割する簡単な方法はありますか?
テーブルごとに1つのSQLスクリプトを1つのファイルに分割する簡単な方法はありますか?
もちろん、[オブジェクトごとのファイル]設定を選択して[スクリプトの生成]タスクを実行できる場合は、これを尋ねることはありません。
データベースのすべてのテーブルに対して、SQL Serverタスク - >スクリプトの生成...という出力が1つのファイルにあります。データベースSQLスクリプトファイルをオブジェクトごとに1つのファイルに分割する簡単な方法はありますか?
テーブルごとに1つのSQLスクリプトを1つのファイルに分割する簡単な方法はありますか?
もちろん、[オブジェクトごとのファイル]設定を選択して[スクリプトの生成]タスクを実行できる場合は、これを尋ねることはありません。
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
タスクの実行 - >スクリプトの生成タスク。最終的なウィザードページで、「ファイルへのスクリプト」を選択し、「オブジェクトごとのファイル」を選択します。出力には既存のフォルダーを指定する必要があります。
私は質問では、スクリプトの生成タスクを再実行できませんでした。しかし、ありがとう。 – mikemerce
チャームのように働いた。ありがとう。 – mikemerce