如何设置SMO ScriptingOptions以保证表的精确副本?

soo*_*ise 15 c# sql smo

我要做的是:使用C#创建一个SQL脚本来创建现有表的精确副本.

我的问题:您如何定义scriptingOptions中的选项以确保生成的脚本能够创建表的100%精确副本?有78个选项,目前尚不清楚如何做到这一点.最初,我想通过调用table.Script()而不传递任何ScriptingOptions,我将能够获得我的表的精确副本,但这不能解决问题(例如,索引不会被编码,除非它们在脚本选项).看来我实际上必须手动指定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();
Run Code Online (Sandbox Code Playgroud)

Mik*_*oud 17

您想要设置以下内容.

  1. ClusteredIndexes = true
  2. 默认= true
  3. FullTextIndexes = true
  4. Indexes = true
  5. NonClusteredIndexes = true
  6. SchemaQualify = true (如果要将其编写到当前架构中)
  7. ScriptData = true (如果要复制数据)
  8. ScriptDrops = true (在重新创建之前,这将在目标数据库中删除表)
  9. ScriptSchema = true (如果要将其编写到当前架构中)
  10. 统计=真
  11. 触发器=真
  12. WithDependencies = true (如果要编写依赖对象的脚本)
  13. DriAll = true (脚本引用完整性操作,如果父表键不存在则不允许INSERT进入子表)

  • "Dri"="声明性参照完整性" (6认同)