1つのファイルにデータベース内のすべてのテーブルのSQLServerタスク->スクリプトの生成...の出力があります。
単一のSQLスクリプトをテーブルごとに1つのファイルに分割する簡単な方法はありますか?
明らかに、[オブジェクトごとのファイル]設定を選択して[スクリプトの生成]タスクを実行できる場合は、これを要求することはありません。
1つのファイルにデータベース内のすべてのテーブルのSQLServerタスク->スクリプトの生成...の出力があります。
単一のSQLスクリプトをテーブルごとに1つのファイルに分割する簡単な方法はありますか?
明らかに、[オブジェクトごとのファイル]設定を選択して[スクリプトの生成]タスクを実行できる場合は、これを要求することはありません。
[タスク]->[スクリプトの生成]タスクを実行します。ウィザードの最後のページで、「スクリプトからファイル」を選択し、「オブジェクトごとのファイル」を選択します。出力用に既存のフォルダーを指定する必要があります。
PowerShellを使用します。SQLファイルの形式がわからないと、これが機能する場合と機能しない場合があります。それは少なくともあなたに出発点を与えるはずです。「table.sql」ファイルへの書き込みを開始しますが、後でファイルの名前をtablename.sqlに変更します。
1. $ lineNumber = 0 2. $ inputFile = "test.sql" 3. foreach(Get-Content $inputFileの$line){ 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
2行目を現在の結合SQLファイルに変更し、9行目を変更してスクリプトに適切なデータベース名を探します。
これは、テストに使用した「test.sql」ファイルのサンプルです。
USE [dbaInventory] 行く / ******オブジェクト:テーブル[dbo]。[tableOne]スクリプト日付:11/22/2010 12:28:55 ****** / ANSI_NULLSをオンに設定 行く QUOTED_IDENTIFIERをオンに設定 行く ANSI_PADDINGをオンに設定 行く CREATE TABLE [dbo]。[tableOne]( [colA] [smallint] NULL、 [colB] [char](1)NULL、 [colC] [decimal](10、2)NULL )[プライマリ]で 行く ANSI_PADDINGをオフに設定 行く USE [dbaInventory] 行く / ******オブジェクト:テーブル[dbo]。[tableTwo]スクリプト日付:11/22/2010 12:28:55 ****** / ANSI_NULLSをオンに設定 行く QUOTED_IDENTIFIERをオンに設定 行く ANSI_PADDINGをオンに設定 行く CREATE TABLE [dbo]。[tableTwo]( [col_A] [char](1)NULL、 [col_B] [decimal](10、2)NULL、 [col_C] [smallint] NULL、 CONSTRAINT[Pk_tableTwo]主キーがクラスター化されました (( [col_A] ASC )WITH(PAD_INDEX = OFF、STATISTICS_NORECOMPUTE = OFF、IGNORE_DUP_KEY = OFF、ALLOW_ROW_LOCKS = ON、ALLOW_PAGE_LOCKS = ON)ON [PRIMARY] )[プライマリ]で 行く ANSI_PADDINGをオフに設定 行く