脚本整个数据库SQL-Server


95

有什么方法可以从数据库中获取所有表,proc和其他对象的脚本?我知道有一个脚本可以编写数据库脚本,但是它只给了我某种顶级脚本,当然不是一个用于创建所有表,proc,udfs等的脚本。


6
他将其标记为SQL Server 2008,所以我认为这就是他所使用的。
科林·麦凯

1
这不是应该去serverfault.com吗?
Salamander2007

Answers:


162

在Management Studio中,右键单击数据库。任务->生成脚本。

那应该做。


2
另一个选择是使用SQL SMO并以编程方式对其进行脚本编写(即,如果需要常规脚本编写)
RobS

有没有一种方法可以设置脚本来执行此操作,因此无论谁运行脚本,设置都始终相同?我预见我们的开发团队中的人每次都会用不同的设置覆盖此文件……
Joe Phillips 2010年

@Joe,我会沿着RobS谈论的路线走下去。您应该能够使用PowerShell做到这一点。否则,开始使用RedGate工具或带有Database Developer的Visual Studio Team Systems。
克里斯·布兰德斯玛

7
默认情况下,它不编写数据脚本。在“表/视图选项”下,选择“脚本数据-> True”。另一个有用的选项是“脚本删除-> True”
Stephen Hosking

1
除非您在菜单Extra> Options> Script generation中选择了最后一个选项,否则生成的脚本将不包含有关列排序规则的任何信息。在德语中,选项为“ Sortierungeinschließen”。这些选项中的大多数甚至都包含在生成脚本的向导中,而该选项不包含(SQL Server 2008)。您确实必须在调用向导之前选择该选项。
Olivier Faucheux

14

我编写了一个名为SchemaZen的开源命令行实用程序来完成此任务。它比Management Studio中的脚本要快得多,并且输出的版本控制更加友好。它支持脚本的架构和数据。

要生成脚本,请运行:

schemazen.exe脚本--server localhost-数据库db --scriptDir c:\ somedir

然后要从脚本重新创建数据库,请运行:

schemazen.exe创建--server本地主机-数据库db --scriptDir c:\ somedir

嗨,我想从我在Visual Studio中创建的本地数据库中获取SQL QUERY,该如何使用此工具呢?我必须使用.sdf文件方向还是如何?谢谢。
卡洛·A·洛佩兹

它是一个紧凑的SQL数据库文件。
卡洛·洛佩兹

1
真切,这是快速和令人敬畏的。
ConstantineK

1
@hobs很高兴您发现它有用。:D
塞斯·里诺

1
@SethReno破坏了我的db上的sys索引= SMO无法编写任何脚本,您的脚本可以编写脚本,因此基本上可以为我节省大量手动做废的时间。顺便说一句,BTW是所有事物的快速反向工程,例如,比SSMS快1000倍,而且它本身似乎比SMO快(这至少是由于启动时间所致)。
ConstantineK

4

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

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


嗯,我在64位Vista上安装了您的smo应用。安装成功,但在我的程序目录或“所有程序”列表中看不到任何项目
PositiveGuy 2009年

3

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

为什么?

  • 我们需要支持在SQL Server 2000、2005和2008上的安装,并且版本之间的数据类型有所变化,例如2005+具有nvarchar(max),而2000仅支持ntext。因此,我们的脚本使用令牌,并根据db选择将其替换为正确的类型。
  • 执行某些脚本后需要等待一段时间,例如,我们发现如果您没有通过脚本创建新数据库后等待几秒钟,则SQL Server有时可能会失败(因为它没有时间创建数据库文件)何时继续创建表格等。
  • 我们想要保留执行什么脚本以及何时执行的历史记录。
  • 我们希望允许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

1

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


1

仅查看表数据,以在Management Studio 2012和2014中输出所有表数据内容,它有点隐藏,但经过一番寻找,我发现了该选项:

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

0

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

这两个库对于SQL Server管理工具的安装都是必不可少的。

在这种情况下,无法从SQL Server Management Studio生成完整的数据库脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.