如何分配ID,但如果不使用则删除

时间:2013-08-29 08:57:07

标签: asp.net sql vb.net

我不确定如何明智地做这个'最佳实践'。

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

作为应用程序的问题可能由2个用户同时打开,因此他们将被分配相同的ref编号,这将导致数据保存时出现问题。

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

1 个答案:

答案 0 :(得分: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 Sequences。这些是除了连续生成数字之外什么都不做的事情。它们保证数字不会重复,并始终保持当前值的计数,即

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

-- get the next sequence value
select next value for OrderIdSequence