我不确定如何明智地执行此“最佳实践”。
我有一个连接到 MS SQL Server 2012 的 Web 应用程序(asp.net VB)。当前,当页面加载时,应用程序连接到数据库表并获取最后一个 ID 并向其添加 1 并将其显示给用户。当用户提交表单时,新 ID 将保存到数据库中。
问题是该应用程序可能由 2 个用户同时打开,因此他们将被分配相同的参考编号,这将在保存数据时导致问题。
如果同时打开应用程序而不保存不必要的数据,如何为不同的用户分配不同的号码?
您对此有多种解决方案,我将尝试概述一些方法。(我假设您需要将东西插入我称之为“订单”的数据库中。)
首先,您可以将生成 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