代码之家  ›  专栏  ›  技术社区  ›  martin

用于从源代码管理重新创建数据库的批处理脚本

  •  4
  • martin  · 技术社区  · 17 年前

    据我所知,如果我想让我的数据库受源代码管理,那么我需要为每个变更签入变更脚本,然后从一些修订版运行它们来获得正确的数据库。

    我正在尝试生成一个批处理文件,该文件也将被签入,这样团队中的其他开发人员就可以在本地重新构建数据库,而不会有太多麻烦。我相信sqlcmd是实现这一点的方法。我设置它来枚举.sql文件目录中的所有文件,并为每个文件运行sqlcmd。

    我的问题是,谁以前做过这件事,你对实现这一点的最佳方法有什么建议吗?我打算怎么做才是最好的,还是有更好的方法?

    希望不要太含糊。

    事先谢谢,

    马丁。

    5 回复  |  直到 16 年前
        1
  •  3
  •   Tigraine    17 年前

    如果您使用的是像nhibernate这样的ORM工具,那么就省去了使用数据库更改脚本的麻烦,因为ORM可以从其映射文件(受源代码管理)中重新创建数据库。

    这是一种非常简单的方法,可以为每个版本提供适当的DB版本。

    然后,每当执行测试时,我也会重新创建整个模式,以确保状态一致。

    我最近在博客上写过: http://www.tigraine.at/2008/10/30/sourcecontrol-and-databases-when-orm-comes-in-handy/

    我还曾经有一个项目有SQL更新脚本,我们刚刚构建了一个小助手工具(非常基本),它打开文件夹,对所有脚本进行排序(我们将它们命名为1-foo.sql,2-bar.sql),然后根据数据库执行它们。

    如果开发人员有了新的脚本,他只需将其添加到末尾(34-bla bla.sql)。

        2
  •  3
  •   Loris    17 年前

    我开发了一个小实用程序,通过将表、SP、触发器和视图导出到文本文件,帮助我对它们进行版本调整: gljakal's Sql Exporter . 它有一个GUI模式和一个命令行模式(所以我可以在批处理文件中使用它)。

    在SQL 2005+上工作。

        3
  •  0
  •   Community Mohan Dere    9 年前

    需要注意的一点是,您需要按照依赖关系的顺序创建对象。所以不能简单地迭代文件。

    我们最终得到了一个批处理文件,它按照依赖关系的顺序列出所有对象。

    实际上,我们有两个批处理文件,一个称为createdbobject.bat:

    :: Parameters Required:
    :: %1 UserID
    :: %2 Password
    :: %3 Server
    :: %4 Database
    :: %5 file with scripted object
    ::
    echo. >> CreateDBObjectsLog.txt
    echo  %5 >> CreateDBObjectsLog.txt
    osql -U%1 -P%2 -S%3 -i%5 -d%4 -n >> CreateDBObjectsLog.txt
    echo * %5
    

    另一个包含所有DB对象的列表:

    :: Parameters Required:
    :: %1 UserID
    :: %2 Password
    :: %3 Server
    :: %4 Database
    ::
    echo object  in %4 database on %3 server
    echo Please Wait ...
    
    if exist CreateDBObjectsLog.txt del CreateDBObjectsLog.txt
    
    
    call createDBObject.bat %1, %2, %3, %4, ScriptedTable1
    call createDBObject.bat %1, %2, %3, %4, ScriptedTable2
    ...
    call createDBObject.bat %1, %2, %3, %4, ScriptedTableN
    
    call createDBObject.bat %1, %2, %3, %4, ScriptedView1
    
    call createDBObject.bat %1, %2, %3, %4, ScriptedSP1
    
    etc
    

    现在我们使用 SQL Compare Pro 自动完成所有这些任务

    您还可以检查相关问题: Is there a “poor man’s” alternative to RedGate for scripting out entire database schema?

        4
  •  0
  •   kristof    17 年前

    如果你的公司愿意投资一些好的工具,那是值得检查的。 SQL Compare Pro . 它非常适合于自动化/简化您描述的任务。他们有14天的免费功能齐全的试用期,所以你可以在投资前进行测试。

        5
  •  0
  •   martin    17 年前

    关于或映射框架能够创建模式,这是一个有趣的观点——我没有想到这一点。我实际上使用的是linq-to-sql,但我相信模式和db仍然可以通过createDatabase()调用重新创建。

    是否有其他人通过LINQ to SQL对数据库源代码进行了这种控制?

    推荐文章