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

Posted

技术标签:

【中文标题】如何设置 SMO ScriptingOptions 以保证表的精确副本?【英文标题】:How to set SMO ScriptingOptions to guarantee exact copy of table? 【发布时间】:2012-07-24 09:08:57 【问题描述】:

我正在尝试做的事情:使用 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();

【问题讨论】:

【参考方案1】:

您要设置以下内容。

    ClusteredIndexes = true 默认 = 真 FullTextIndexes = true 索引 = true NonClusteredIndexes = true SchemaQualify = true (如果您想将其写入当前架构) ScriptData = true (如果要复制数据) ScriptDrops = true (这将在重新创建之前删除目标数据库中的表) ScriptSchema = true (如果您想将其写入当前架构) 统计 = 真 触发器 = 真 WithDependencies = true (如果要编写依赖对象的脚本) DriAll = true (脚本引用完整性操作,例如如果父表键不存在则不允许插入子表)

【讨论】:

您对“Dri”选项了解吗? “Dri”是什么意思? @sooprise 是的,很抱歉,我错过了那个。您确实想将DriAll 属性设置为true。我已经更新了答案。 @sooprise 这对你有用吗?如果不让我知道,我会帮你解决的。谢谢! "Dri" = "声明性参照完整性" @sooprise - 这对你来说是一个可以接受的答案吗?如果没有,我需要添加什么?如果是这样,您能否将其标记为已接受的答案,以便我们都知道它对您有用?【参考方案2】:

我用过smo,错误是你必须 - 考虑所有数据库对象之间的关系。在编写表格脚本时,您必须编写所有安全对象、外键、扩展属性等脚本。 - 由于关系确定脚本对象的正确顺序 对我来说,确保您拥有相同数据库对象的最佳方法是使用数据库备份。

【讨论】:

以上是关于如何设置 SMO ScriptingOptions 以保证表的精确副本?的主要内容,如果未能解决你的问题,请参考以下文章

如何提高 Weka 中 SMO 分类器的性能?

如何使用 SMO 在存储过程中调用 c# 函数?

有人知道如何使用 Microsoft.SqlServer.Management.Smo.Table 异步创建表吗?

如何使用 SMO 和 SQL Server 生成脚本以删除列?

如何在 C# 中使用 SMO 使用 FILE STREAM 备份和恢复数据库

如何使用 SMO 脚本生成 sql 脚本