【问题标题】:Is there a "poor man's" alternative to RedGate for scripting out entire database schema? [closed]是否有替代 RedGate 的“穷人”替代方案来编写整个数据库模式的脚本? [关闭]
【发布时间】:2010-09-15 05:00:54
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql-server sql-server-2000 sqltools


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      希望这会有所帮助。

      【讨论】:

      • 不太清楚“创建设备”是什么意思,也许是数据库?只要 SQL 帐户有足够的权限,一切都可以编写脚本。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 感谢您的建议!我没有提到的另一个障碍是我要解决的直接问题包括客户端托管的数据库和环境锁定,我必须跳过严重的障碍来安装软件。非常有用且相关的建议!
          【解决方案6】:

          我之前已经多次成功使用this program from CodeProject。它不仅可以编写模式脚本,还可以(可选)编写所有重新创建数据库所需的 INSERT 语句。

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

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

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

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

              一旦您提取了脚本 - 使用其他答案之一 - 您可能需要考虑使用此脚本作为您的“主人”的基础。

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

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

              【讨论】:

              • 很好的建议。实际上,我之前曾在一个项目中使用过该策略 - 将创建脚本签入 VSS(希望我们使用的东西是您可以签入版本集,但通过标签解决了这个问题)我希望开发人员能够继承了这个,做了这个。
              • 我们实际上将所有的 CREATE 命令都放在了一个脚本中——它可能不是最好的方法,但它非常适合进行快速更改和用于文档目的。
              【解决方案9】:

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

              Enterprise Manager 中选择要从中编写脚本对象的数据库,然后右键单击并选择 All Tasks -> Generate SQL Scripts...

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

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

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

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

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

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

              当时一切都很顺利

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

              【讨论】:

              • 无赖 - 我以为我隐约记得依赖关系的问题。我猜把这些整理出来不会很有趣,因为我有 200 多张桌子。感谢您的有用回复
              【解决方案10】:

              如果它是一次性操作并且您不想自己订购对象脚本,只需download a free trial version of RedGate SQL Compare

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

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

              【讨论】:

              • 我们使用 SQL Compare 将我们的开发数据库与空白数据库进行比较,并从中获取可应用于任何空白数据库的脚本,使其与开发版本相同。该工具的作用远不止于此,虽然不一定便宜,但它是必不可少的。
              猜你喜欢
              • 1970-01-01
              • 2021-11-26
              • 2011-05-05
              • 1970-01-01
              • 1970-01-01
              • 2020-05-27
              • 1970-01-01
              • 2010-09-26
              • 1970-01-01
              相关资源
              最近更新 更多