0

我有一个预先存在的 sqlserver 表。在其他字段中,它有一个称为 ID 的标识列,它也是一个主键,还有一个 RecordNumber 列,它是一个必填字段。RecordNumber 列中的 int 值必须是唯一的。所以在插入一行之前,我得到了 ID 列的最大值,将其加 1,然后插入 RecordNumber 字段 = ID + 1 的行。问题是当两个用户尝试同时保存时,他们可能获取相同的 ID 值,因此将在 RecordNumber 字段中保存相同的值。请让我知道如何解决这个问题。

谢谢

4

3 回答 3

1

最简单和最有效的方法是将该列定义为 * auto increment *

参考

http://www.w3schools.com/sql/sql_autoincrement.asp

于 2012-08-26T18:29:49.183 回答
0

备选方案#1 - 自动增加字段

CREATE TABLE SampleTable
(
    P_Id int NOT NULL Identity(1,1),
    FirstName varchar(255),
    PRIMARY KEY (P_Id)
)

备选方案 #2 - SequentialID 作为默认约束

CREATE TABLE SampleTable
(
    P_Id uniqueidentifier NOT NULL,
    FirstName varchar(255),
    PRIMARY KEY (P_Id)
)
ALTER TABLE [dbo].[SampleTable] 
ADD CONSTRAINT [DF_SampleTable_P_Id]  
DEFAULT newsequentialid() FOR [P_Id]

备选方案#3 - NewID 作为默认约束

CREATE TABLE SampleTable
(
    P_Id Varchar(100) NOT NULL,
    FirstName varchar(255),
    PRIMARY KEY (P_Id)
)
ALTER TABLE [dbo].[SampleTable] 
ADD  CONSTRAINT [DF_SampleTable_P_Id]  
DEFAULT (newid()) FOR [P_Id]

在多用户交易的情况下,应使用推荐的示例存储过程

BEGIN TRY
    SET NOCOUNT ON
    SET XACT_ABORT ON
    Begin TRAN
        --Your Code
    COMMIT TRAN
END TRY

BEGIN CATCH
    ROLLBACK TRAN
END CATCH
于 2012-08-27T03:58:39.927 回答
0

您可以使用事务概念,使用提交和回滚操作。

MSDN 上非常有趣的链接:http: //msdn.microsoft.com/en-gb/library/ms190295.aspx

于 2012-08-26T18:28:54.550 回答