Создать следующий буквенно-цифровой код на SQL Server - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно создать последовательную последовательность кода varchar (5) ( всегда только 5 символов ), начиная с ПРЕДЫДУЩЕГО кода.

Например,

'00000', '00001', '00002' ... '00009', '0000A', '0000B' ... '0000Z', '00010 ',' 00011 '...' ZZZZZ '.

Так что, если у меня есть @ PREVIOUS_CODE = ' 00000 ', @ NEXT_CODE будет '00001' .

Если у меня есть @ PREVIOUS_CODE = '00009' , @ NEXT_CODE будет '0000A'

Если у меня будет @ PREVIOUS_CODE = '0000Z' , @ NEXT_CODE будет '00010'

Так что мне нужно что-то подобное

USE [DATABASE]
GO

CREATE PROCEDURE [dbo].[spGetNextCode]
@PREVIOUS_CODE VARCHAR(5) 
AS
DECLARE @NEXT_CODE VARCHAR(5) 

DO STUFF
...

SELECT @NEXT_CODE AS NEXT_CODE
GO

Любая помощь?

1 Ответ

0 голосов
/ 03 декабря 2018

Просто держите целочисленный счетчик в той же таблице и конвертируйте его.Я использую следующую функцию SQL Server в одном из моих приложений:

CREATE FUNCTION [dbo].[GetAlphanumericCode]  
(  
 @number BIGINT,  
 @leadingzeroes INT = 0  
)  
RETURNS varchar(255)  
AS  
BEGIN  

   DECLARE @charPool varchar(36)  
   SET @charPool = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'  

   DECLARE @result varchar(255)  

   IF @number < 0  
      RETURN ''  

   IF @number = 0  
      SET @result = '0'  
   ELSE BEGIN
      SET @result = ''  

      WHILE (@number > 0)  
      BEGIN  
         SET @result = substring(@charPool, @number % 36 + 1, 1) + @result  
         SET @number = @number / 36 
      END  
   END  

   IF @leadingzeroes > 0 AND len(@result) < @leadingzeroes  
      SET @result = right(replicate('0', @leadingzeroes) + @result, @leadingzeroes)  

   RETURN @result  

END

Это должно быть тривиальной задачей переписать ее как хранимую процедуру

...