2016-10-03 7 views
1

Я строю систему управления очередью в C# с помощью SQL Server 2008 R2. Предоставление услуг во многих отделах одновременно, как служба поддержки клиентов, отдел женского пола, раздел регистрации. Например. ДляЧто наилучший подход для автоматического Increament

  • Ladies Раздел: Токен {1-50}
  • Уход клиентов: Символические {51-350}
  • Регистрация Раздел: Символические {351-550}
  • Нормальные клиенты: Символические {551- 999}

Я использую этот подход, прежде всего, я смотрю, с какого отдела я получаю запрос. Проверьте флажок Token Range этого отдела в таблице, а затем получите существующее значение Token для этого отдела. Переопределение существующего значения с помощью таблицы «Обновление следующего номера».

Есть ли другой подход я могу использовать, потому что я перед проблемой, что иногда такой же номер лексемы приходит на два экрана/Регистрация/Клиент/Ladies Разделы Нормально клиента.

Благодаря

+3

Я надеюсь, что вы не использовать столбец автоматического приращения для этого. –

ответ

1

Вы можете использовать обновление с оператором вывода, как это:

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 
+0

Я также предлагаю вам обернуть 'update' часть в функции или процедуры –

+0

@AndreyMorozov согласен, я отредактировал мой ответ – sventevit

+0

@sventevit, К сожалению я не слишком хорошо в SQL. Не могли бы вы сообщить мне, как получить следующий знак для обслуживания клиентов, регистрации и обычных клиентов ??? –

 Смежные вопросы

  • Нет связанных вопросов^_^