在查询时直接跳过身份
Skip an identity directly on query
我遇到这种情况:
TABLE 1
- ID,
- 其他栏目
TABLE 2
- ID,
- 其他栏目
我想要实现的是,在对其中一个 table 进行插入查询时,如果身份已存在于另一个中,则跳过它并选择一个新的。
为什么?因为这些table基本上是相关的,只是没有任何数据库关系。当用户想要调用属于另一个 table 的对象时,他应该能够只知道其中一个 table 的 ID。
在我的例子中,我有 income/financial 个帐户 与 注册表 相关联,并且它们必须具有 相同的 ID.
目前采用的解决方案(讨厌的一个)
一笔交易。如果生成的 id 在另一个 table 中不存在则提交,如果存在则中止,并且由于 while 循环(这是我不喜欢的部分)交易将继续实例化直到满足条件。
还有其他干净的解决方案吗?
身份不适合这种情况。解决方案:您需要使用单个序列在两个表中插入。简单明了。
这是干净的解决方案。所有其他的都只是(丑陋的)解决方法。
这是一个非常奇怪的请求,但您可以增加标识值,使一个为偶数,另一个为奇数。那么两个表之间就永远不会有任何重叠:
create table table1 (
table1_id int identity(1, 2) primary key,
. . .
);
create table table2 (
table2_id int identity(2, 2) primary key,
. . .
);
这似乎是我能想到的最有效的方式来满足您的要求。
我遇到这种情况:
TABLE 1
- ID,
- 其他栏目
TABLE 2
- ID,
- 其他栏目
我想要实现的是,在对其中一个 table 进行插入查询时,如果身份已存在于另一个中,则跳过它并选择一个新的。
为什么?因为这些table基本上是相关的,只是没有任何数据库关系。当用户想要调用属于另一个 table 的对象时,他应该能够只知道其中一个 table 的 ID。 在我的例子中,我有 income/financial 个帐户 与 注册表 相关联,并且它们必须具有 相同的 ID.
目前采用的解决方案(讨厌的一个)
一笔交易。如果生成的 id 在另一个 table 中不存在则提交,如果存在则中止,并且由于 while 循环(这是我不喜欢的部分)交易将继续实例化直到满足条件。
还有其他干净的解决方案吗?
身份不适合这种情况。解决方案:您需要使用单个序列在两个表中插入。简单明了。
这是干净的解决方案。所有其他的都只是(丑陋的)解决方法。
这是一个非常奇怪的请求,但您可以增加标识值,使一个为偶数,另一个为奇数。那么两个表之间就永远不会有任何重叠:
create table table1 (
table1_id int identity(1, 2) primary key,
. . .
);
create table table2 (
table2_id int identity(2, 2) primary key,
. . .
);
这似乎是我能想到的最有效的方式来满足您的要求。