3

我不确定如何明智地执行此“最佳实践”。

我有一个连接到 MS SQL Server 2012 的 Web 应用程序(asp.net VB)。当前,当页面加载时,应用程序连接到数据库表并获取最后一个 ID 并向其添加 1 并将其显示给用户。当用户提交表单时,新 ID 将保存到数据库中。

问题是该应用程序可能由 2 个用户同时打开,因此他们将被分配相同的参考编号,这将在保存数据时导致问题。

如果同时打开应用程序而不保存不必要的数据,如何为不同的用户分配不同的号码?

4

1 回答 1

0

您对此有多种解决方案,我将尝试概述一些方法。(我假设您需要将东西插入我称之为“订单”的数据库中。)

首先,您可以将生成 ID 的时间移到实际插入订单的那一刻,而不是用户开始输入数据的那一刻。这样,您就不会为从不填写表单的用户生成 ID。此外,使用 sql server 中的自动递增值很容易实现此场景。例如,您可以这样做:

-- create a table with an identity column
create table Orders (
    ID int identity(1,1) not null, 
    Description nvarchar(max) not null
);

-- insert values, without specifying the ID column
insert into Orders (Description) values ()

-- select the row back
-- returns 1, 'My First Order'
select * from Orders;

另一种方法是使用SQL Server 序列。这些是除了连续生成数字之外什么都不做的事情。他们保证数字不会重复,并始终保持当前值的计数,即

-- create a sequence
create sequence OrderIdSequence 
start with 1
increment by 1;

-- get the next sequence value
select next value for OrderIdSequence
于 2013-08-29T08:59:38.963 回答