Bra*_*ann 92 sql-server automation ssms sql-server-2008 visual-studio-2008
我想在SQL Server Management Studio 2008中自动生成脚本.
现在我做的是:
有没有办法自动完成这项任务?
编辑:我想生成创建脚本,而不是更改脚本.
Old*_*eve 40
与SSMS中的脚本生成相比,SqlPubwiz的选项非常有限.相比之下,SMO提供的选项几乎与SSMS中的选项完全匹配,这表明它甚至可能是相同的代码.(我希望MS没写两次!)有MSDN上几个例子像这一次,显示脚本表作为单独的对象.但是,如果您希望所有内容都使用包含"DRI"(声明参照完整性)对象(如外键)的"完整"架构正确编写脚本,则单独编写脚本表将无法正确地处理依赖项.我发现收集所有URN并将它们作为数组交给脚本编写器是必要的.这个代码,从示例中修改,对我有用(虽然我敢说你可以整理它并对它进行更多评论):
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Sdk.Sfc;
...
// Connect to the local, default instance of SQL Server.
Server srv = new Server();
// Reference the database.
Database db = srv.Databases["YOURDBHERE"];
Scripter scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;
scrp.Options.Indexes = true; // To include indexes
scrp.Options.DriAllConstraints = true; // to include referential constraints in the script
scrp.Options.Triggers = true;
scrp.Options.FullTextIndexes = true;
scrp.Options.NoCollation = false;
scrp.Options.Bindings = true;
scrp.Options.IncludeIfNotExists = false;
scrp.Options.ScriptBatchTerminator = true;
scrp.Options.ExtendedProperties = true;
scrp.PrefetchObjects = true; // some sources suggest this may speed things up
var urns = new List<Urn>();
// Iterate through the tables in database and script each one
foreach (Table tb in db.Tables)
{
// check if the table is not a system table
if (tb.IsSystemObject == false)
{
urns.Add(tb.Urn);
}
}
// Iterate through the views in database and script each one. Display the script.
foreach (View view in db.Views)
{
// check if the view is not a system object
if (view.IsSystemObject == false)
{
urns.Add(view.Urn);
}
}
// Iterate through the stored procedures in database and script each one. Display the script.
foreach (StoredProcedure sp in db.StoredProcedures)
{
// check if the procedure is not a system object
if (sp.IsSystemObject == false)
{
urns.Add(sp.Urn);
}
}
StringBuilder builder = new StringBuilder();
System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
foreach (string st in sc)
{
// It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
// Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
builder.AppendLine(st);
builder.AppendLine("GO");
}
return builder.ToString();
Run Code Online (Sandbox Code Playgroud)
noo*_*ish 31
Brann从Visual Studio 2008 SP1 Team Suite中提到的是数据库发布向导的1.4版.它与sql server 2008(可能只有专业?)一起安装到\ Program Files\Microsoft SQL Server\90\Tools\Publishing\1.4.来自服务器资源管理器的VS调用只是调用它.您可以通过命令行实现相同的功能,如:
sqlpubwiz help script
Run Code Online (Sandbox Code Playgroud)
我不知道v1.4是否有与v1.1相同的麻烦(用户转换为角色,约束不是以正确的顺序创建),但它不是我的解决方案,因为它不会编写脚本对象到SSMS中的Tasks-> Generate Scripts选项等不同的文件.我目前正在使用Scriptio的修改版本(使用MS SMO API)作为数据库发布向导(sqlpubwiz.exe)的改进替代品.它目前不能从命令行编写脚本,我可能会在将来添加该贡献.
Scriptio最初发布在Bill Graziano的博客上,但随后被Bill发布到CodePlex并由其他人更新.阅读讨论以了解如何编译以与SQL Server 2008一起使用.
编辑:我已经开始使用RedGate的SQL Compare产品来做到这一点.它是sql发布向导应该具有的所有替代品的非常好的替代品.您选择数据库,备份或快照作为源,将文件夹作为输出位置,它将所有内容很好地转储到文件夹结构中.它恰好与其他产品SQL Source Control使用的格式相同.
Set*_*eno 15
我编写了一个名为SchemaZen的开源命令行实用程序来执行此操作.它比管理工作室的脚本快得多,它的输出更适合版本控制.它支持脚本化架构和数据.
要生成脚本运行:
schemazen.exe script --server localhost --database db --scriptDir c:\somedir
然后从脚本运行重新创建数据库:
schemazen.exe create --server localhost --database db --scriptDir c:\somedir
Joe*_*Joe 12
您可以使用SQL Server管理对象(SMO)自动执行SQL Server 2005管理任务,包括生成脚本: http://msdn.microsoft.com/en-us/library/ms162169.aspx.
我没有看到任何这些答案中提到的带有SQLPSX的powershell ......我个人没有使用过它,但它看起来非常简单易用,非常适合这种类型的自动化任务,其任务包括:
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter
Run Code Online (Sandbox Code Playgroud)
(参考:http://www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100)
项目页面:http://sqlpsx.codeplex.com/
这种方法的主要优点是它结合了直接使用SMO的可配置性/可定制性,以及使用简单的现有工具(如数据库发布向导)的便利性和可维护性.
在“工具”>“选项”>“设计器”>“表和数据库设计器”中,有一个“自动生成更改脚本”选项,该选项将为您在保存时所做的每项更改生成一个脚本。
| 归档时间: |
|
| 查看次数: |
83980 次 |
| 最近记录: |