我正在尝试做什么:使用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();
答案 0 :(得分:17)
您想要设置以下内容。
答案 1 :(得分:0)
我使用过smo,错误就是你必须这样做 - 考虑所有数据库对象之间的关系。在编写表脚本时,您必须编写所有安全对象的脚本,外键,扩展属性等。 - 由于关系,确定脚本对象的正确顺序 至于我,确保您拥有相同数据库对象的最佳方法是使用数据库备份。