在test和prod之间同步标识列

时间:2017-08-15 07:11:00

标签: sql-server

我们有一个表,在我们的app数据库中包含一些枚举值和应用程序参数值。这些记录使用标识列作为主键。我们还有DEV,TEST和PROD数据库。每次发布更新时,我们都需要在TEST和PROD数据库之间同步主键。

我想问的是,同步标识列的首选方法是什么?我们想到的一个选项是从主键列中删除identity属性并手动创建在DEV和PROD上都相同的ID。

你有什么想法?

1 个答案:

答案 0 :(得分:0)

您需要有理由向Identity添加PK属性。显然Identity会自动生成PK的方式,并让您忘记MAX(id)+1之类的代码。因此,如果它在您的情况下没有意义(据我所知,您的值是预定义的,代码库需要具体的值),那么删除标识列应该是一个很好的解决方案。

另一个好的做法是在数据脚本中添加联合检查,让它们失败或通知是否存在任何冲突。使用非身份方法,它看起来像:

IF EXISTS (SELECT 1 from enum_table where id = @idToInsert)
    --notify there is a conflict 
    -- else insert @idToInsert

在我的一个项目中,我们发现测试和prod数据库套件之间的每周刷新最适合我们,因此请考虑调查此变体。

优点:

  • 您将始终拥有新鲜/一致的数据/架构来重现产品问题
  • 无需删除查找表的标识列(如果有意义 - 就像枚举值不仅可以通过手动脚本显示)

缺点:

  • 可能不足以让许多团队在同一个测试环境中工作,但我觉得这取决于流程的组织程度。

希望这有帮助