【问题标题】:Auto-Increment editable Column自动增量可编辑列
【发布时间】:2019-10-08 19:49:59
【问题描述】:

我正在寻找我遇到的问题的最佳解决方案。

我有几个数据库,我经常对齐它们以在其中包含相同的数据。在一些参考表中有自动增量 ID 列,而在其他表中有与这些 ID 值匹配的列。不幸的是,在更改后的源数据库 ID 上可能是:(10,15,20),而在将其插入目标表后,它是 (1,2,3)。我希望我的模型能澄清情况:

源数据库参考表:

ID_________Name
10_________a
15_________b
20_________c

目标数据库参考表:

ID_________Name
1__________a
2__________b
3__________c

来源事实表:

RefTableID___OtherColumns
10__________a
10__________b
15__________c
15__________d

问题是在将 FactTable 迁移到目标数据库后,它与 RefTable 中的记录不匹配。我有一个想法,添加另一个与 ID 列相比可编辑的列。问题是最终用户不应该看到它(这对他来说没有任何意义),所以它也应该是自动增量的。在这种情况下我应该使用什么:

  • 序列?
  • -触发?
  • -发布添加/保存存储过程?

或者也许有人对如何解决这个问题有更好的想法?

【问题讨论】:

  • 为什么在目标数据库上使用自增?数据库也是从其他来源更新的?
  • 是的。一般来说,只有一个数据库是开发用的,一个是给终端用户的,所以以后只有第二个会很重要
  • 尝试打开 identity_insert 并在更新后重新关闭。

标签: sql sql-server database-migration auto-increment identity-column


【解决方案1】:

在 SQL Server 中,一旦将行插入表中,就无法更新标识列。

但是,可以使用set identity_insert 手动插入指定表的值。 在每个会话中,您只能有一个表同时将identity_insert 设置为on,因此请在插入完成后始终将其设置回off

代码可能如下所示:

set identity_insert RefTable on;

insert into RefTable (id, name)
select id, name
from sourceDb.sourceSchema.RefTable s
where not exists (
    select 1
    from RefTable t
    where t.Id = s.Id
);

set identity_insert RefTable off;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多