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

问题描述 投票:0回答:2

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

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

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

这些脚本使用“Insert Into tablename...”语句填充所需的数据,例如查找表。

我面临的问题是:

  1. 如果在上面的示例中 Script1 因数据库已存在而失败,并且由于纠正数据中的拼写错误等结构发生微小变化而重新部署,则其余批处理也将中止。
  2. insert into 语句中的更改不会传播,因为当解聚到现有数据库时,Data.*.sql 文件中的第一个语句将失败,因为该行已存在。

有没有办法让 Visual Studio 数据库项目比较现有数据库中的数据并根据行是否已存在使用插入或更新?

database visual-studio-2010 deployment
2个回答
1
投票

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.