预加载数据库项目中的数据

时间:2013-08-06 14:10:50

标签: database visual-studio-2010 deployment

我的解决方案中有一个visual studio数据库项目,用于管理对数据库和源代码控制的更改。

我在项目中的Scripts / Post-Deployment文件夹下有每个表的脚本,我在Script.PostDeployment.sql中运行如下:

:r .\Data.Script1.sql
:r .\Data.Script2.sql
....

这些脚本使用“Insert Into tablename ...”语句填充查询表等所需数据。

我面临的问题是:

  1. 如果在上面的例子中Script1因为数据库已经存在而失败而我正在重新部署,因为纠正数据等中的拼写错误的结构发生了微小的变化,其余的批次也被中止了。
  2. 插入到语句中的更改不会传播,因为在Data. *。sql文件中对现有数据库第一个语句进行depolying时,由于该行已经存在,因此将失败。
  3. Visual Studio数据库项目是否有办法比较现有数据库中的数据,并根据行是否已存在使用插入或更新?

    感谢您的输入

2 个答案:

答案 0 :(得分:1)

您应该在Data。*。sql文件中使用MERGE INTO而不是INSERT INTO语句。

有关详细信息,请参阅此MSDN文章http://blogs.msdn.com/b/ssdt/archive/2012/02/02/including-data-in-an-sql-server-database-project.aspx

答案 1 :(得分:0)

您概述的问题可通过liquibaseflyway等迁移工具解决。它们记录已应用于数据库的迁移,因此只会针对特定版本运行新的更改。

其他语言中也存在类似的工具。我个人推荐liquibase,我在命令行模式下使用(非Java项目)并集成到应用程序代码中。