为整个数据库SQL Server编写脚本

为整个数据库SQL Server编写脚本,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,有没有办法从数据库中获取所有表、进程和其他对象的脚本?我知道可以选择为数据库编写脚本,但它只提供了某种顶级脚本,当然不是从ManagementStudio创建所有表、过程、UDF等的脚本。 右键单击数据库。 任务->生成脚本 这应该可以做到。如果需要以编程方式进行,可以针对SQL Server 2000使用SQL DMO库(OLE),但更可能的情况是,您希望针对SQL Server 2005和更高版本使用SQL SMO库(本机.NET库) 这两个库都是SQL Server管理工具安装的组成部分

有没有办法从数据库中获取所有表、进程和其他对象的脚本?我知道可以选择为数据库编写脚本,但它只提供了某种顶级脚本,当然不是从ManagementStudio创建所有表、过程、UDF等的脚本。

右键单击数据库。 任务->生成脚本


这应该可以做到。

如果需要以编程方式进行,可以针对SQL Server 2000使用SQL DMO库(OLE),但更可能的情况是,您希望针对SQL Server 2005和更高版本使用SQL SMO库(本机.NET库)

这两个库都是SQL Server管理工具安装的组成部分


在这种情况下,从SQLServerManagementStudio生成完整的数据库脚本是不够的

我建议查看RedGate SQL packager。它不是免费的,但已经足够有用,值得付出代价

我为此任务编写了一个实用程序


脚本生成由SMO库执行,并支持SQL 2005和2008中的新对象类型

我们最终使用SSMS脚本生成的组合来提取模式和数据,然后使用我们自己的数据库工具,该工具允许在脚本中进行关键字解析和基于令牌的替换。它还确保脚本只应用一次

为什么?

  • 我们需要支持SQL Server 2000、2005和2008上的安装,并且版本之间的数据类型会发生更改,例如,2005+具有nvarchar(max),而2000仅支持ntext。因此,我们的脚本使用一个令牌,并根据db选项替换为正确的类型
  • 执行某些脚本需要在执行后等待一段时间,例如,我们发现,如果在通过脚本创建新数据库后没有等待几秒钟,SQL Server在继续创建表时有时可能会失败(因为它没有时间创建db文件),等等
  • 我们希望维护执行了哪些脚本以及何时执行的历史记录
  • 我们想让我们的Wix-MSI安装程序指定连接字符串和凭据,并且需要某种方式将它们传递到脚本中,所以再次使用令牌和一些条件逻辑
示例脚本(为简洁起见进行了编辑)


我编写了一个名为的开源命令行实用程序来实现这一点。它比从ManagementStudio编写脚本快得多,而且它的输出对版本控制更友好。它支持为模式和数据编写脚本

要生成脚本,请运行:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir schemazen.exe create --server localhost --database db --scriptDir c:\somedir schemazen.exe脚本--服务器本地主机--数据库db--脚本目录c:\somedir 然后,要从脚本重新创建数据库,请运行:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir schemazen.exe create --server localhost --database db --scriptDir c:\somedir
schemazen.exe create--server localhost--database db--scriptDir c:\somedir仅查看表数据,要在Management Studio 2012和2014中输出所有表数据内容,它有点隐藏,但我在查看后发现了该选项:

  • 右键单击数据库
  • 选择“任务”>“生成脚本…”
  • 在“设置脚本选项”上,单击“高级”
  • 在“常规”下,将“要脚本的数据类型”设置为true(位于“常规”组的底部)

  • 他给它贴上了SQL Server 2008的标签,所以我想这就是他正在使用的。这不是应该转到serverfault.com吗?另一个选择是使用SQL SMO并以编程方式编写脚本(即,如果需要常规脚本),是否有办法设置脚本来执行此操作,以便无论谁运行它,设置都是相同的?我预见我们开发团队的人每次都会用不同的设置覆盖这个文件…@Joe,我会沿着RobS所说的路线走下去。您应该可以使用PowerShell实现这一点。否则,请使用Database Developer查看RedGate工具或Visual Studio Team Systems。默认情况下,它不会编写数据脚本。在表/视图选项下选择“脚本数据->真”。另一个有用的选项是“Script Drop->True”。生成的脚本不会包含任何关于列排序规则的信息,除非您在菜单Extra>Options>Script generation中选择了最后一个选项。在德语中,选项是“Sortierung einschließen”。即使这些选项中的大多数都包含在生成脚本的向导中,但这一个没有(SQL Server 2008)。在调用向导之前,您必须选择该选项。嗯,我在Vista 64位上安装了您的smo应用程序。安装成功,但在我的程序目录或“所有程序”列表中看不到项目。我想从visual studio中创建的本地数据库中获取SQL查询,如何使用此工具执行此操作?我必须使用.sdf文件的方向还是如何?谢谢。这是一个紧凑的SQL数据库文件。天哪,这太快了,太棒了。@hobs我很高兴你发现它很有用。:D@SethRenomy db=SMO上损坏的sys索引无法编写任何脚本,而您的脚本可以,因此基本上节省了我大量手动处理垃圾的时间。顺便说一句,所有东西的逆向工程速度都非常快,比如比SSM快1000倍,而且它本身似乎比SMO快(至少是因为启动时间)。