【发布时间】:2014-05-21 09:10:55
【问题描述】:
我想我会问一个非常令人困惑的问题,所以我希望我能为你们说清楚,所以,提前谢谢,如果这有点长,我很抱歉,因为我想确保我说得够清楚了。
我有两个表(在 SQL 2005 中),它们相互依赖(我们将它们命名为 TableA 和 TableB。)它们具有所有相同的列,这意味着,TableA 的所有列也是 TableB 的列,除了 TableA 有比 TableB 多两列(后面会解释为什么)。
在我的应用程序(使用 VB.Net 创建)的“保存”过程中,那些具有 column1 和 column2 值的记录被插入到 TableA 中。但是,如果 column1 和 column2 没有任何输入,则记录将保存在 Table2 中(这就是为什么 TableA 比 TableB 多两列的原因:具有 column1 和 column2 的记录进入 TableA,而那些没有的记录进入 TableB。 )
两个表都有一个身份主键(自增 +1,从 1000 开始),我们将其称为 TableA 的 KeyID_A 和 TableB 的 KeyID_B,如果您已经可以想象这种情况,它们的键 ID 具有相同的值(TableA 有一行 KeyID_A 为 '1000',TableB 也有一行(不同的) KeyID_B 为 '1000')。
在应用程序中,表单(输入 TableA/TableB 中插入的记录)是自动编号的(我使用 SELECT nextID=MAX(KeyID_A)+1 FROM TableA 设置了这个,是的,仅来自 TableA,这导致了我的问题)。
如果我用 column1 和 column2 的值保存了一条记录,该记录将插入到 TableA 中,KeyID_A 的值作为键。但是,如果我没有 column1 和 column2 的值,并且记录以 KeyID_A 的值作为键保存在 TableB 中,我将如何获得下一个 ID(注意:SELECT nextID=MAX(KeyID_A)+1 FROM TableA)如果应该是下一个TableA 的 ID 已在 TableB 中使用?我想根据TableA和TableB的现有记录获取下一个ID,而不仅仅是基于TableA(因为我想,如果我已经为TableB使用了TableA的nextID(比如说'1001',我想要将另一条记录保存到 TableB 中,但出现的自动编号仍然是“1001”,因为它仅基于 TableA 的 KeyID_A。
我真的很困惑如何做到这一点,如果这是可能的话。我希望我的问题足够清楚。
【问题讨论】:
-
您是否有多个用户同时在这两个表中插入数据?
-
我确定我只有一个用户。
-
好吧,我建议添加第三张表(C),它只存储一条记录,即使用的最新id。当您在 A 或 B 中插入时,从该表中选择下一个 id,保存数据并增加 C 中存在的唯一记录的值。顺便说一下,如果这是您决定 ID 的场景,则从 A 中删除 IDENTITY和乙
-
哦...我明白了。我从来没有想过创建一个新的表/视图,以便两个表只有一个主键来源。我尝试的是嵌套 IF-ELSE 语句来测试该键是否已经存在于 TableB 中,也许这就是我发疯的原因。然后我会发现解决方案非常简单。谢谢大家,你们的回答很有帮助。