2016-10-03 2 views
1

SQL Server 2008 R2를 사용하여 C#으로 큐 관리 시스템을 구축하고 있습니다. Customer Care, Ladies Section, Registration Section과 같이 한 번에 여러 부서에서 서비스를 제공합니다. 예를 들어. 토큰 {1-50} 자동 수신에 가장 적합한 방법은 무엇입니까

  • 고객 지원 센터 : 토큰 {51-350}
  • 등록 계 : 토큰 {351-550}
  • 일반 고객 : 토큰 {551-

    • 여성 섹션 999}

    나는이 방법을 사용하고 있습니다. 무엇보다 먼저 어떤 부서로부터 요청을 받고 있는지 찾고 있습니다. 표의 해당 부서의 토큰 범위를 확인한 다음이 부서의 기존 토큰 값을 가져옵니다. 다음 값 업데이트 테이블을 사용하여 기존 값을 재정의합니다.

    일반 고객/등록/고객/숙녀 섹션의 두 화면에 때로는 동일한 토큰 번호가 표시되기 때문에 제가 사용할 수있는 다른 방법이 있습니까?

    덕분에이 같은

  • +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에 너무 좋지 않습니다. 고객 관리, 등록 및 일반 고객을위한 다음 토큰을받는 방법을 알려주십시오. –

    관련 문제