首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL复合主键复制

SQL复合主键复制
EN

Stack Overflow用户
提问于 2014-07-03 08:09:36
回答 1查看 2K关注 0票数 1

vb.net,sql server 2008 r2,过程

我的复合主键有问题。我有张桌子:

代码语言:javascript
复制
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。

示例:

代码语言:javascript
复制
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)

--我有成千上万的用户,也许还有两个用户同时在做,然后他们得到了错误。

我想做什么来解决这个问题:

我不会在我的web应用程序中选择column1的最后一个值。我会在我的程序中直接这样做。示例:

代码语言:javascript
复制
INSERT INTO example
    (column1, 
     column2)
SELECT 
    ISNULL(MAX(column1), 0) + 1 FROM example WHERE column2 = 206, 
    206

就这样,有可能翻倍吗?(我在寻找自动增量,但在复合主键中是不可能的)有什么更好的方法吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 08:56:48

给出的语句仍然可以得到重复的键错误。当两个用户想要同时插入时,他们同时执行insert的select查询,并获得相同的值。

以下是一些处理这些问题的方法:

  • 把桌子锁上。选择最大id。插入数据。打开桌子。
  • 插入。如果失败,再试一次(一次又一次,直到它成功)。
  • column1有意义吗?如果是这样的话,两个用户如何才能插入一个含义相同的记录呢?如果不是,为什么不使用一个序列来获得一个值?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24548316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档