Generar código Tipo String automático
En muchas ocaciones se nos presentan adversidades cuando estamos desarrollando un software que es difícil realizar con algún componente o con alguna herramienta automática que nos genere nuestro IDE de desarrollo. Este fue uno de los casos, me encuentro con un software que automáticamente necesitaba que se generara un código varchar de 5 caracteres alfanuméricos para insertarlo en una tabla, para el mismo me cree una función en SQL que hacía esto que necesitaban (porqué no usar un campo autonumber????, ni idea, cosas de ellos), pero aquí les dejo las funciones desarrolladas para este caso:
CREATE function genCode(@code varchar(10), @length int)
returns varchar(10)
as
begin
SET @code = Upper(@code)
if DATALENGTH(@code) < @length
begin
while DATALENGTH(@code) < @length
begin
set @code = @code + '0'
end
end
else if DATALENGTH(@code) = @length
begin
declare @ascii_code int
declare @posneg int
set @posneg = @length s
et @ascii_code = dbo.getAscii(@code, @posneg)
while @ascii_code >= 91
begin
set @posneg = @posneg - 1
set @ascii_code = dbo.getAscii(@code, @posneg)
set @code = SUBSTRING(@code, 1, @posneg)
end
set @code = SUBSTRING(@code, 1 , @posneg - 1) + char(@ascii_code)
if DATALENGTH(@code) < @length
begin
while DATALENGTH(@code) < @length
begin
set @code = @code + '0'
end
end
end
return @code
end
go
CREATE function getAscii(@code varchar(10), @posneg int)
returns int
as
begin
declare @ascii_code int
set @ascii_code = ASCII(SUBSTRING(@code, @posneg, 1))+1
if @ascii_code between 58 and 64
set @ascii_code = 65
if @ascii_code between 32 and 47
set @ascii_code = 48
return @ascii_code
end
CREATE function genCode(@code varchar(10), @length int)
returns varchar(10)
as
begin
SET @code = Upper(@code)
if DATALENGTH(@code) < @length
begin
while DATALENGTH(@code) < @length
begin
set @code = @code + '0'
end
end
else if DATALENGTH(@code) = @length
begin
declare @ascii_code int
declare @posneg int
set @posneg = @length s
et @ascii_code = dbo.getAscii(@code, @posneg)
while @ascii_code >= 91
begin
set @posneg = @posneg - 1
set @ascii_code = dbo.getAscii(@code, @posneg)
set @code = SUBSTRING(@code, 1, @posneg)
end
set @code = SUBSTRING(@code, 1 , @posneg - 1) + char(@ascii_code)
if DATALENGTH(@code) < @length
begin
while DATALENGTH(@code) < @length
begin
set @code = @code + '0'
end
end
end
return @code
end
go
CREATE function getAscii(@code varchar(10), @posneg int)
returns int
as
begin
declare @ascii_code int
set @ascii_code = ASCII(SUBSTRING(@code, @posneg, 1))+1
if @ascii_code between 58 and 64
set @ascii_code = 65
if @ascii_code between 32 and 47
set @ascii_code = 48
return @ascii_code
end
Comentarios