19

我处于一种情况,我想为一个数据库生成一个脚本,我可以在另一台服务器上运行并获得一个与原始数据库相同的数据库,但没有任何数据。本质上,我想最终得到一个捕获数据库模式的大型创建脚本。

我在安装了 SQL Server 2000 的环境中工作,并且无法安装 2005 客户端工具(如果它们有帮助的话)。我买不起 RedGate,但我真的很想在另一台服务器上拥有一个具有相同架构的数据库。

有什么建议么?任何简单的 .exe(无需安装)工具、提示或 T-SQL 技巧将不胜感激。

更新:我正在使用的数据库有 200 多个表和几个外键关系和约束,因此手动编写每个表的脚本并将脚本粘贴在一起不是一个可行的选择。我正在寻找比这个手动解决方案更好的东西

附加更新除非我完全遗漏了什么,否则这不是使用 SQL 2000 工具的可行解决方案。当我选择在数据库上生成创建脚本的选项时。我最终得到一个包含 CREATE DATABASE 命令的脚本,并且没有创建任何对象 - 表、约束等。SQL 2005 的管理工作室也可以处理这些对象,但是数据库处于没有我将安装的 Management Studio 连接到它的方式。

4

10 回答 10

12

运行 SQL Server Management Studio,右键单击数据库并选择Script Database as > Create to > file

这适用于 SQL Server 2005。SQL Server 2000 企业管理器具有类似的命令。只需右键单击数据库> All Tasks > Generate Scripts

编辑:在 SQL Server 2005 中,您可以在对象资源管理器窗格中选择“数据库”,并在详细信息窗格中选择多个数据库。然后,右键单击您的选择和“脚本数据库为 > 创建到 > 文件”。这将导致它将它们全部放入一个脚本中,它将包括所有表、键、存储过程和约束。

于 2008-10-03T22:24:56.147 回答
9

因此,我假设您无法安装 SQL Server Management Studio。甚至没有免费版本。如果这是一次性的事情,我会安装红门工具。试用版可使用 14 天。做你的工作,然后卸载。您还可以查看http://www.xsqlsoftware.com/,它们具有与 Red Gate 类似的功能。如果您的数据库很小,那么他们可以为您提供免费选项。我也喜欢http://www.apexsql.com/。试用其中一种,然后再次尝试说服您的老板购买。

于 2008-10-07T19:33:45.180 回答
6

除了上述答案之外,我想建议(至少对于未来的项目)您没有掌握数据库本身的数据库设计。

实现此目的的一种方法是从第一天开始将您的数据库表、过程等简单地维护为“CREATE”脚本,并设计一个主脚本,将所有单独的脚本拉到一起以部署到您选择的数据库。

一个更复杂的解决方案是使用 Visual Studio Database Edition 之类的东西(可能太贵了,如果您的评论是可以接受的),它允许您将每个数据库对象视为项目中的一个节点,同时仍然允许整个事情是只需单击几下即可部署。

这两个选项的解释过于简单,因为还有很多其他问题——版本控制、数据迁移等——但主要原则是相同的。

一旦你提取了你的脚本——使用其他答案之一——你可能想要考虑使用这个脚本作为你的“主人”的基础。

只需将“设计”保留在数据库之外 - 这纯粹是为了“实现”。

试着把这个过程想象成开发代码的过程——源代码和二进制文件是分开的,后者是从前者生成的。

于 2008-10-09T15:33:34.633 回答
2

我之前已经成功使用过 CodeProject 中的这个程序很多次。它不仅可以编写模式脚本,还可以(可选地)编写所有重新创建数据库所需的 INSERT 语句。

我过去曾将它用于 SQL Server 2000。显然,如果您的表中有一百万行,那么编写内容脚本可能不是一个好主意,但它实际上是一个非常巧妙的工具,可以制作一系列 SQL 脚本来复制数据库。

于 2008-10-07T20:33:41.830 回答
2

如果它是一次性操作并且您不想自己订购对象脚本,只需下载 RedGate SQL Compare 的免费试用版

这是 14 天的完整工作版本,因此它将为您完成整个工作 - 这是完全合法的解决方案。您将拥有所有脚本以供将来与手动脚本一起使用。无论如何,我很确定,如果您发现该工具有多方便,您将在以后的某个阶段购买它,而这可能是他们通过提供完全可用的试用版所希望的。在我的情况下,它以某种方式起作用。

请注意,一旦试用期结束,它会影响所有工具,因此请确保充分利用它。

于 2008-10-09T20:48:39.507 回答
1

Michael Lang,当您右键单击数据库并选择创建脚本时,您需要单击几个选项框才能生成所有内容。2005在这方面要容易得多,但是2000可以做到这一点,你只需要选择合适的选项。

于 2008-10-06T18:27:55.873 回答
1

如果您正在寻找命令行版本,Sql Server Hosting Toolkit过去曾为我工作过。

于 2008-10-06T18:35:52.613 回答
1

Microsoft 数据库发布向导(在 Visual Studio 2008 中)。

于 2008-10-07T20:40:44.313 回答
1

正如您在SQL Server 2000中提到的,要使用的命令是:

企业管理器中选择要从中编写对象脚本的数据库,然后右键单击并选择所有任务 -> 生成 SQL 脚本...

选项窗格中,可以方便地选择选项为每个对象创建一个文件,这样您就可以将每个对象分别存储在源代码管理中。

因此,每当您对 tableA 进行一些更新时,您都可以在源代码管理中将其签出,以让其他人知道您正在处理它,并且在完成后您可以编写该单个对象的脚本并保存签入。

要编写单个对象的脚本,您可以使用相同的选项 All Tasks -> Generate SQL Scripts...,然后只选择那个对象。

这种方法的唯一问题是,当您想要恢复完整的数据库时,您需要处理依赖对象,因为顶级对象必须在依赖于它们的对象之前恢复。

具有讽刺意味的是,当您将整个数据库编写到一个文件中时,对象不是根据依赖关系排序的,而是根据创建日期排序的。当您尝试使用它来恢复完整的数据库时,这会导致错误。

我们最终创建了批处理文件,该文件将分别创建每个对象,调用“osql”

那时一切都很好

现在我们使用SQLCompare Pro,它可以让我们免于麻烦,但如果你不经常发布,你可以不用它。

于 2008-10-09T17:40:03.910 回答
0

其他的都是正确的,但是为了从头开始创建一个完整的数据库,您需要在运行创建表和过程脚本之前在 SQL 中创建一个“设备”...

使用 ADODB,因为几乎每个(如果不是每个)Windows 框都安装了它来执行脚本。

见鬼,你甚至可以编写一个执行来构建整个数据库的 vbScript。您拥有的任何域表,您需要记住在将项目添加到数据库之前打开身份插入。

如果您需要,我愿意共享源代码。几年前我不得不写同样的东西,最后写了 3 个脚本,一个创建设备,然后是表格,然后是过程/触发器和域数据。我编写了代码来解析默认脚本并允许用户命名他自己的数据库和登录名等。您可能不必走那么远。

希望这有帮助。

于 2008-10-03T22:39:01.393 回答