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

Sql server 用于从源代码管理重新创建数据库的批处理脚本,sql-server,version-control,batch-file,sqlcmd,Sql Server,Version Control,Batch File,Sqlcmd,据我所知,如果我想让我的数据库受源代码控制,那么我需要为每个更改签入更改脚本,然后从一些修订版运行它们,以获得正确的数据库 我正在尝试创建一个批处理文件,该文件也将被检入,从而允许团队中的其他开发人员在本地重新构建数据库,而不会有太多麻烦。我相信sqlcmd是实现这一点的方法。我已经设置好枚举.sql文件目录中的所有文件,并为每个文件运行sqlcmd 我的问题是谁以前做过这件事,你对实现这一点的最佳方法有什么建议吗?我打算这样做的方式是最好的方式还是有更好的方式 希望这不是太模糊 提前感谢, M

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

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

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

希望这不是太模糊

提前感谢,


Martin。

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

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

实际上我们有两个批处理文件,一个叫做say 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
现在我们使用它来自动化所有这些任务


您还可以检查相关问题:

如果您使用的是像NHibernate这样的ORM工具,那么您就省去了使用DB更改脚本的麻烦,因为ORM可以从它的映射文件(在源代码控制下)重新创建数据库

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

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

我最近在博客上写道:

我还曾经有一个项目有Sql更新脚本,我们刚刚构建了一个小助手工具(非常基本),它可以打开文件夹,对所有脚本进行排序(我们将它们命名为1-foo.Sql,2-bar.Sql),并按照DB的顺序执行它们


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

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

关于OR映射框架能够创建模式,这是一个有趣的观点-我没有想到这一点。我实际上在使用LINQtoSQL,但我相信模式和数据库仍然可以通过CreateDatabase()调用重新创建


还有其他人通过LINQ to SQL采用这种数据库源代码控制方法吗?

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

适用于SQL 2005+