16

私がやろうとしていること: C#を使用してSQLスクリプトを作成し、既存のテーブルの正確なコピーを作成します。

私の質問: scriptingOptionsでオプションをどのように定義して、結果のスクリプトがテーブルの100%正確なコピーを作成することを保証しますか?78のオプションがあり、これを行う方法は明確ではありません。最初は、ScriptingOptionsを渡さずにtable.Script()を呼び出すことで、テーブルの正確なコピーを取得できると思いましたが、これではうまくいきません(たとえば、インデックスは、で指定されていない限りコーディングされません)。スクリプトオプション)。実際には、ScriptingOptionsで各プロパティを手動で指定して、必要なものを取得する必要があるようです。希望する結果を得るために、どれを設定しますか?テーブルを正確にコピーするのはそれほど難しいことではありません。

使用可能なスクリプトオプション:使用可能なすべてのオプションは次のとおりです。http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.scriptingoptions_properties.aspx

私のコード:

Server server = new Server("XXX");
Database database = new Database();
database = server.Databases["YYY"];
Table table = database.Tables["ZZZ", @"PPP"];

ScriptingOptions scriptingOptions = new ScriptingOptions();

//Define properties in scriptingOptions 

StringCollection result = table.Script(scriptingOptions);

var script = "";
foreach (var line in result) {
    script += line;
}

System.IO.StreamWriter fs = System.IO.File.CreateText(@"QQQ");
fs.Write(script);
fs.Close();
4

2 に答える 2

21

以下を設定したい。

  1. ClusteredIndexes = true
  2. デフォルト = 真
  3. FullTextIndexes = true
  4. インデックス = true
  5. NonClusteredIndexes = true
  6. SchemaQualify = true (現在のスキーマにスクリプトを作成する場合)
  7. ScriptData = true (データをコピーする場合)
  8. ScriptDrops = true (これにより、ターゲット データベース内のテーブルが再度作成される前に削除されます)
  9. ScriptSchema = true (現在のスキーマにスクリプトを作成する場合)
  10. 統計 = true
  11. トリガー = true
  12. WithDependencies = true (依存オブジェクトをスクリプト化する場合)
  13. DriAll = true (親テーブル キーが存在しない場合、子テーブルへの INSERT を許可しないなどの参照整合性アクションをスクリプト化します)
于 2012-07-31T15:27:22.337 に答える
0

私はsmoを使用しましたが、間違いは、間の関係のためにすべてのデータベースオブジェクトを考慮する必要があるということです。テーブルをスクリプト化するときは、すべてのセキュリティオブジェクト、外部キー、拡張プロパティなどをスクリプト化する必要があります。-関係があるため、オブジェクトをスクリプト化する正しい順序を特定します。私にとって、同じデータベースオブジェクトがあることを確認する最良の方法は、データベースバックアップを使用することです。

于 2012-08-05T11:12:50.333 に答える