我不确定如何明智地执行此“最佳实践”。
我有一个连接到 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 Sequences 。这些东西除了连续生成数字之外什么也不做。它们保证数字不会重复,并始终保持当前值的计数,即
-- create a sequence
create sequence OrderIdSequence
start with 1
increment by 1;
-- get the next sequence value
select next value for OrderIdSequence
关于asp.net - 如何分配一个 ID,但如果不使用则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18506414/