直接在查询

时间:2018-05-25 18:19:54

标签: sql sql-server identity

我遇到这种情况:

表1

  • ID
  • 其他专栏

表2

  • ID
  • 其他专栏

我想要实现的是,在其中一个表上插入查询后,如果另一个表中已存在标识,则跳过它并选择一个新表。

为什么呢?因为这些表基本相关,但没有任何数据库关系。当用户想要调用属于另一个表的对象时,他应该只能知道其中一个表的ID。 在我的情况下,我有收入/财务帐户注册管理机构相关联,并且他们必须具有相同的ID

目前采用的解决方案(令人讨厌的)

交易。如果生成的id在另一个表中不存在则提交,如果存在则中止,并且由于while循环(这是我不喜欢的部分),事务将一直被实例化,直到满足条件。

那里有其他干净的解决方案吗?

2 个答案:

答案 0 :(得分:3)

对于这种情况,身份并不好。解决方案:您需要在两个表中使用单个序列进行插入。简单明了。

这是一个干净的解决方案。所有其他人都只是(丑陋)解决方法。

答案 1 :(得分:0)

这是一个非常奇怪的请求,但你可以增加身份值,使一个是偶数,另一个是奇数。然后两个表之间永远不会有任何重叠:

create table table1 (
    table1_id int identity(1, 2) primary key,
    . . . 
);

create table table2 (
    table2_id int identity(2, 2) primary key,
    . . .
);

这似乎以我能想到的最有效的方式满足您的要求。