【发布时间】:2014-08-24 06:13:39
【问题描述】:
[vb.net, sql server 2008 r2, 程序]
我的复合主键有问题。我有一张桌子:
CREATE TABLE example (
column1 NUMERIC,
column2 NUMERIC,
PRIMARY KEY (column1, column2)
);
1-1
1-2
1-2
2-1
2-2
2-3
3-1
...
但有时用户会收到错误...“无法插入重复键”。
试图找出原因...我正在按以下方式插入:
在我的 vb.net 应用程序中,首先我选择 column1 的最后一个数字。在它之后,我添加 +1。
示例:
Dim column2 As Integer = 206
// Here I get the last number of column1, and then I add + 1
Dim column1 As Integer = DALExample.GetLastNumber(column2)
// Here I insert the next row
DALExample.Insert(column1 + 1, column2)
我有成千上万的用户,也许还有 2 个用户同时在做这件事,然后他们得到了错误。
我正在考虑如何解决这个问题:
我不会在我的 Web 应用程序中选择 column1 的最后一个值。我将在我的程序中直接进行。示例:
INSERT INTO example
(column1,
column2)
SELECT
ISNULL(MAX(column1), 0) + 1 FROM example WHERE column2 = 206,
206
这样,有没有翻倍的可能? (我一直在寻找自动增量,但在复合主键中是不可能的)有没有更好的方法来做到这一点?
谢谢!
【问题讨论】:
-
为什么不使用序列/自动增量数字。?
-
@Blood-HaZaRd 你在一个表上只能有一个标识列
-
这是一个与其他表相关的链接表吗?请提供更多有关此表中的数据如何与其他表或您的代码相关的上下文。
-
@Tanner column1 不是指向其他表的链接,但 column2 是指向某个表的链接。
-
@guinatal 并且它们中的任何一个都是独一无二的吗?是一对多的关系,在什么方向。请将此信息添加到问题中,因为它将帮助人们回答。
标签: sql sql-server vb.net stored-procedures