SQL Server - Código Alfanumérico Autoincrementable

 
Vista:

Código Alfanumérico Autoincrementable

Publicado por Cristopher Torres (1 intervención) el 07/11/2017 23:37:38
Hola qué tal,
Deseo realizar un código alfanumérico que sea autoincrementable como en el siguiente ejemplo:
AAA0001, AAA0002 ... AAA9999, AAB0001, ...ABA0001, hasta llegar a ZZZ9999,
Por ahora e implementado un código que me sirve para incrementar en la parte numérica:

1
2
3
4
select
	left(max(codigo),3)+right('0000'+
	convert(varchar(10),right(max(codigo),4)+1),4)
from proof

Pero aún no hallo como resolver el aumento en las letras, espero me puedan ayudar, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 9
Ha disminuido su posición en 8 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Código Alfanumérico Autoincrementable

Publicado por Hugo QN (19 intervenciones) el 08/11/2017 21:10:57
Hola Cristopher, tendrias que hacer una función y pasarle el código como parámetro, el script seria masomenos como sigue.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
DECLARE	@ls_letras CHAR(7), @ls_letra1 CHAR(1), @ls_letra2 CHAR(1), @ls_letra3 CHAR(1), @ls_correltivo VARCHAR(5), @ls_letra CHAR(1)
DECLARE	@li_asciiletra INTEGER, @li_contador INTEGER, @ls_incrementar CHAR(1)
 
SELECT	@ls_letras = 'AAZ9999'
SELECT	@ls_correltivo = RIGHT(@ls_letras, 4) + 1
 
SELECT	@li_asciiletra = ASCII(@ls_letra3) + 1, @li_contador = 3, @ls_incrementar = 'N'
 
IF @ls_correltivo > 9999
BEGIN
	SET	@ls_correltivo = 1
	WHILE  @li_contador	> 0
	BEGIN
		SET	@ls_letra = SUBSTRING(@ls_letras, @li_contador, 1)
		SET	@li_asciiletra = ASCII(@ls_letra) + 1
 
		IF @li_contador	= 1	SET	@ls_letra1 = @ls_letra;
		IF @li_contador	= 2	SET	@ls_letra2 = @ls_letra;
		IF @li_contador	= 3	SET	@ls_letra3 = @ls_letra;
 
		IF @li_asciiletra > 90
		BEGIN
			SET	@ls_incrementar = 'S'
			IF @li_contador	= 1	SET	@ls_letra1 = 'A';
			IF @li_contador	= 2	SET	@ls_letra2 = 'A';
			IF @li_contador	= 3	SET	@ls_letra3 = 'A';
		END
		ELSE
		BEGIN
			IF @ls_incrementar = 'S'
			BEGIN
				IF @li_contador	= 1	SET	@ls_letra1 = CHAR(@li_asciiletra);
				IF @li_contador	= 2	SET	@ls_letra2 = CHAR(@li_asciiletra);
				IF @li_contador	= 3	SET	@ls_letra3 = CHAR(@li_asciiletra);
				SET	@ls_incrementar = 'N';
			END
		END
		SET	@li_contador = @li_contador - 1;
	END
END
ELSE
	SELECT	@ls_letra1 = LEFT(@ls_letras, 1), @ls_letra2 = SUBSTRING(@ls_letras, 2, 1), @ls_letra3 = SUBSTRING(@ls_letras, 3, 1);
 
SELECT	@ls_letras AS Antiguo, @ls_letra1 + @ls_letra2 + @ls_letra3 + RIGHT('0000' + @ls_correltivo, 4) AS Nuevo;

espero te ayude.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar