3-letter alphabetic counter with two SQL procedures
(a, b ... z, aa, ab ... zy, zz, aaa ... zzz):
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO alter procedure letraMas @letraEntra as char( 1), @letraSale as char( 1) OUTPUT, @seLleva as bit OUTPUT as --set @letraEntra = 'w' --set @letraSale = 'm' set @seLleva = 0 select @letraSale = CASE WHEN @letraEntra = '' or (@letraEntra is null) or @letraEntra = 'z' THEN 'a' WHEN @letraEntra < 'z' THEN CHAR (ASCII( @letraEntra) + 1) end if @letraEntra = 'z' set @seLleva = 1 return
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /* USO: declare @tareaEntra as char(3), @tareaSale as char(3) set @tareaEntra = 'xzz' EXEC tareaMas @tareaEntra, @tareaSale OUTPUT */ alter procedure tareaMas @tareaEntra as char( 3), @tareaSale as char( 3) OUTPUT as declare @charU as char(1 ) -- char de U_nidades albabéticas declare @charD as char(1 ) -- char de D_ecenas albabéticas declare @charC as char(1 ) -- char de C_entenas albabéticas declare @letraSale as char(1 ) -- char de C_entenas albabéticas declare @seLleva as bit set @tareaEntra = right(' ' + rtrim (@tareaEntra), 3) set @charU = substring(@tareaEntra , 3, 1) set @charD = substring(@tareaEntra , 2, 1) set @charC = substring(@tareaEntra , 1, 1) EXEC letraMas @charU, @letraSale OUTPUT, @seLleva OUTPUT set @charU = @letraSale if @seLleva = 1 BEGIN EXEC letraMas @charD, @letraSale OUTPUT, @seLleva OUTPUT set @charD = @letraSale if @seLleva = 1 BEGIN EXEC letraMas @charC, @letraSale OUTPUT, @seLleva OUTPUT set @charC = @letraSale END END set @tareaSale = ltrim(@charC + @charD + @charU) return
source share