[vb.net,sql server 2008 r2,procedure]
我的复合主键出现问题。我有一张桌子:
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
这样,有可能加倍吗? (我一直在寻找自动增量,但在复合主键中是不可能的)有没有更好的方法呢?
谢谢!
答案 0 :(得分:1)
您仍然可以通过给出的语句获得重复键错误。当两个用户想要同时插入时,他们会同时执行insert的select查询并获得相同的值。
以下是处理此问题的一些方法: