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

标签 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();

最佳答案

您要设置以下内容。

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

关于c# - 如何设置 SMO ScriptingOptions 以保证表的精确副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658143/

相关文章:

c# - 使用 XElement 追加 XML

sql - 不带group by的聚合查询

MySQL 工作台 : How to keep the connection alive

c# - 如何获取特定机器的 SqlInstances 列表

sql - 如何使用 VB.NET 的 SMO 类将单个表传输到 MSSQL 服务器中的另一个数据库?

c# - .NET 核心 2.1 和 EF 框架 2.1

c# - 使用 Web 服务的代理类从字符串值动态调用方法名称

c# - 如何隐藏和取消隐藏 XtraTabControl 的页面?

mysql - 将子查询结果设置为数组,运行时间过长

properties - 向 T4 模板添加属性 - 选择服务器、数据库、表