我有一个预先存在的 sqlserver 表。在其他字段中,它有一个称为 ID 的标识列,它也是一个主键,还有一个 RecordNumber 列,它是一个必填字段。RecordNumber 列中的 int 值必须是唯一的。所以在插入一行之前,我得到了 ID 列的最大值,将其加 1,然后插入 RecordNumber 字段 = ID + 1 的行。问题是当两个用户尝试同时保存时,他们可能获取相同的 ID 值,因此将在 RecordNumber 字段中保存相同的值。请让我知道如何解决这个问题。
谢谢
我有一个预先存在的 sqlserver 表。在其他字段中,它有一个称为 ID 的标识列,它也是一个主键,还有一个 RecordNumber 列,它是一个必填字段。RecordNumber 列中的 int 值必须是唯一的。所以在插入一行之前,我得到了 ID 列的最大值,将其加 1,然后插入 RecordNumber 字段 = ID + 1 的行。问题是当两个用户尝试同时保存时,他们可能获取相同的 ID 值,因此将在 RecordNumber 字段中保存相同的值。请让我知道如何解决这个问题。
谢谢
CREATE TABLE SampleTable
(
P_Id int NOT NULL Identity(1,1),
FirstName varchar(255),
PRIMARY KEY (P_Id)
)
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]
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
您可以使用事务概念,使用提交和回滚操作。
MSDN 上非常有趣的链接:http: //msdn.microsoft.com/en-gb/library/ms190295.aspx