脚本整个数据库SQL-Server

时间:2009-07-21 23:44:17

标签: sql sql-server sql-server-2008

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

7 个答案:

答案 0 :(得分:153)

来自Management Studio 右键单击您的数据库。 任务 - >生成脚本。

应该这样做。

答案 1 :(得分:12)

我编写了一个名为SchemaZen的开源命令行实用程序来执行此操作。它比管理工作室的脚本快得多,而且它的输出更适合版本控制。它支持脚本化架构和数据。

生成脚本运行:

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

然后从脚本运行:

重新创建数据库
schemazen.exe create --server localhost --database db --scriptDir c:\somedir

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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

为什么呢?

  • 我们需要支持SQL Server 2000,2005和2008上的安装,并且版本之间的数据类型也有变化,例如: 2005+有nvarchar(max),而2000只支持ntext。因此,我们的脚本使用令牌,并根据db选项替换正确的类型。
  • 执行某些脚本需要在执行后等待一段时间,例如:我们发现如果您在通过脚本创建新数据库后没有等待几秒钟,SQL Server可能会在创建表等时有时失败(因为它没有时间创建db文件)。
  • 我们希望保留执行脚本的历史记录以及何时执行。
  • 我们希望允许我们的Wix MSI安装程序指定连接字符串和凭据,并且需要一些方法将这些传递给脚本,所以再次使用令牌和一些条件逻辑。

示例脚本(为简洁起见编辑)

-- 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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

只是查看表格数据,在Management Studio 2012和2014中输出所有表格数据内容,它有点隐藏但是我在找了一些选项之后找到了选项:

  1. 右键单击db
  2. 选择'任务' > '生成脚本......'
  3. 点击'设置脚本选项',点击“高级”
  4. 在' General'下,设置'数据类型为脚本'为真(它位于' General'组的底部)

答案 6 :(得分:0)

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

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

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