脚本整个数据库SQL-Server

有没有办法从数据库中获取所有表,过程和其他对象的脚本? 我知道有一个脚本数据库的选项,但它只给了我一些顶级脚本,当然不是一个脚本来创build所有的表,procs,udfs,.etc。

从Management Studio中右键单击数据库。 任务 – >生成脚本。

这应该做到这一点。

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

要生成脚本运行:

  schemazen.exe脚本--server localhost --database db --scriptDir c:\ somedir 

然后从脚本运行重新创build数据库:

  schemazen.exe create --server localhost --database db --scriptDir c:\ somedir 

我为这个任务写了一个实用程序, SMOscript 。

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

我们最终使用SSMS脚本生成的组合来提取模式和数据,然后使用我们自己的数据库工具,它允许在脚本中进行关键字parsing和基于标记的replace。 它也确保脚本只应用一次。

为什么?

  • 我们需要支持SQL Server 2000,2005和2008上的安装,并且版本之间的数据types也有变化,例如2005+有nvarchar(max),而2000只支持ntext。 所以我们的脚本使用一个令牌,并基于数据库selectreplace正确的types。
  • 执行某些脚本需要等待一段时间后执行,例如我们发现,如果在通过脚本创build新数据库后没有等待几秒钟,SQL Server可能会失败(因为它没有足够的时间来创build数据库文件),当它继续创build表等
  • 我们希望保持脚本执行的时间和时间的历史。
  • 我们希望允许我们的Wix MSI安装程序指定连接string和凭证,并且需要一些方法将这些传递到脚本中,所以再次使用令牌和一些条件逻辑。

示例脚本(为简洁起见)

-- Sleep: 5 -- Sleep after creating database to allow file system to create db files CREATE DATABASE [$Database$] GO EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$ GO USE [$Database$] GO IF '1'!='$IntegratedSecurity$' BEGIN CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$] CREATE USER [$User$] FOR LOGIN [$Login$] EXEC sp_addrolemember N'db_owner', N'$User$' END GO 

我build议看看RedGate SQL打包器。 这不是免费的,但已经足够有用的价值。

只要查看表格数据,就可以输出Management Studio 2012和2014中的所有表格数据内容,但有点隐藏,但是在查看一下后我发现了这个选项:

  1. 右键单击数据库
  2. select“任务”>“生成脚本…”
  3. 在“设置脚本选项”上,点击“高级”
  4. 在“常规”下,将“脚本数据types”设置为true(位于“常规”组的底部)

如果您需要以编程方式执行此操作,则可以针对SQL Server 2000使用SQL DMO库(OLE),但是更可能希望针对SQL Server 2005及更高版本使用SQL SMO库(本机.NET库)。

这两个库都是SQL Serverpipe理工具安装不可缺less的部分。

这是从SQL Server Management Studio中生成完整数据库脚本的情况不足。