什么是自动增量的最佳方法
What is Best Approach for Auto Increament
我正在使用 Sql Server 2008 R2 在 C# 中构建一个队列管理系统。一次在多个部门提供服务,如客户服务、女士部门、登记部门。例如。对于
- 女士组:令牌{1-50}
- 客户服务:令牌 {51-350}
- 注册部分:令牌{351-550}
- 普通客户:代币{551-999}
我正在使用这种方法,首先我正在寻找从哪个部门收到请求。查看Table中该部门的Token Range,获取该部门Token的现有值。使用更新下一个数字覆盖现有值 table。
我是否可以使用任何其他方法,因为我面临的问题是有时相同的令牌号会出现在普通客户的两个屏幕上's/Registration/Customer/Ladies 部分。
谢谢
您可以将更新与输出语句一起使用,如下所示:
use tempdb
go
if object_id('Tokens', 'u') is not null drop table Tokens
if object_id('GetNextToken', 'p') is not null drop procedure GetNextToken
go
create table Tokens (
Id int identity(1,1) not null,
Name varchar(50) not null,
TokenFrom int not null,
TokenTo int not null,
LastUsedToken int null,
constraint PK_Tokens primary key clustered (Id),
constraint UQ_Tokens_Name unique (Name)
)
go
insert into Tokens (Name, TokenFrom, TokenTo)
select 'Ladies Section', 1, 50 union
select 'Customer Care', 51, 350 union
select 'Registration Section', 351, 550 union
select 'Normal Customers', 551, 999
go
create procedure GetNextToken
@name varchar(50),
@token int output
as
begin
declare @tokens table (token int)
update Tokens
set LastUsedToken =
case
when LastUsedToken is null then TokenFrom
when LastUsedToken = TokenTo then TokenFrom
else LastUsedToken + 1
end
output inserted.LastUsedToken into @tokens
where Name = @name
set @token = (select top 1 token from @tokens)
end
go
-- To get 'Ladies Section'
declare @name varchar(50), @token int
set @name = 'Ladies Section'
exec GetNextToken @name, @token output
select @token
go
-- To get 'Customer Care'
declare @name varchar(50), @token int
set @name = 'Customer Care'
exec GetNextToken @name, @token output
select @token
go
-- To get 'Registration Section'
declare @name varchar(50), @token int
set @name = 'Registration Section'
exec GetNextToken @name, @token output
select @token
go
-- To get 'Normal Customers'
declare @name varchar(50), @token int
set @name = 'Normal Customers'
exec GetNextToken @name, @token output
select @token
我正在使用 Sql Server 2008 R2 在 C# 中构建一个队列管理系统。一次在多个部门提供服务,如客户服务、女士部门、登记部门。例如。对于
- 女士组:令牌{1-50}
- 客户服务:令牌 {51-350}
- 注册部分:令牌{351-550}
- 普通客户:代币{551-999}
我正在使用这种方法,首先我正在寻找从哪个部门收到请求。查看Table中该部门的Token Range,获取该部门Token的现有值。使用更新下一个数字覆盖现有值 table。
我是否可以使用任何其他方法,因为我面临的问题是有时相同的令牌号会出现在普通客户的两个屏幕上's/Registration/Customer/Ladies 部分。
谢谢
您可以将更新与输出语句一起使用,如下所示:
use tempdb
go
if object_id('Tokens', 'u') is not null drop table Tokens
if object_id('GetNextToken', 'p') is not null drop procedure GetNextToken
go
create table Tokens (
Id int identity(1,1) not null,
Name varchar(50) not null,
TokenFrom int not null,
TokenTo int not null,
LastUsedToken int null,
constraint PK_Tokens primary key clustered (Id),
constraint UQ_Tokens_Name unique (Name)
)
go
insert into Tokens (Name, TokenFrom, TokenTo)
select 'Ladies Section', 1, 50 union
select 'Customer Care', 51, 350 union
select 'Registration Section', 351, 550 union
select 'Normal Customers', 551, 999
go
create procedure GetNextToken
@name varchar(50),
@token int output
as
begin
declare @tokens table (token int)
update Tokens
set LastUsedToken =
case
when LastUsedToken is null then TokenFrom
when LastUsedToken = TokenTo then TokenFrom
else LastUsedToken + 1
end
output inserted.LastUsedToken into @tokens
where Name = @name
set @token = (select top 1 token from @tokens)
end
go
-- To get 'Ladies Section'
declare @name varchar(50), @token int
set @name = 'Ladies Section'
exec GetNextToken @name, @token output
select @token
go
-- To get 'Customer Care'
declare @name varchar(50), @token int
set @name = 'Customer Care'
exec GetNextToken @name, @token output
select @token
go
-- To get 'Registration Section'
declare @name varchar(50), @token int
set @name = 'Registration Section'
exec GetNextToken @name, @token output
select @token
go
-- To get 'Normal Customers'
declare @name varchar(50), @token int
set @name = 'Normal Customers'
exec GetNextToken @name, @token output
select @token