1

1つのファイルにデータベース内のすべてのテーブルのSQLServerタスク->スクリプトの生成...の出力があります。

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

明らかに、[オブジェクトごとのファイル]設定を選択して[スクリプトの生成]タスクを実行できる場合は、これを要求することはありません。

4

2 に答える 2

2

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

于 2010-11-22T15:56:30.690 に答える
0

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をオフに設定
行く
于 2010-11-22T19:45:09.280 に答える