UFN_MKTSOURCECODE_BUILDNEXTVALUE
Builds the next source code value for a given format and code.
Return
Return Type |
---|
nvarchar(10) |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FORMAT | nvarchar(10) | IN | |
@CODE | nvarchar(10) | IN |
Definition
Copy
CREATE function dbo.[UFN_MKTSOURCECODE_BUILDNEXTVALUE]
(
@FORMAT nvarchar(10),
@CODE nvarchar(10)
)
/*
Takes a source code part value and a format and builds the next code in sequence.
*/
returns nvarchar(10)
as begin
declare @SOURCECODEPART nvarchar(10);
declare @CODECHAR char;
declare @FORMATCHAR char;
declare @STARTPOS integer;
declare @INCREMENTNEXT bit; /* Indicates whether or not we need to increment the next character in the code */
set @INCREMENTNEXT = 1;
set @STARTPOS = LEN(@FORMAT);
set @FORMATCHAR = substring(@FORMAT, @STARTPOS, 1);
set @CODECHAR = substring(@CODE, @STARTPOS, 1);
set @SOURCECODEPART = '';
/* Loop backwards through the code and format */
while (@STARTPOS > 0)
begin
declare @NEXTCHAR char;
if @INCREMENTNEXT = 1
begin
if (@FORMATCHAR = '#') -- number
begin
if (@CODECHAR = '9' or @CODECHAR = '')
begin
set @NEXTCHAR = '0';
set @INCREMENTNEXT = 1;
end
else
begin
set @NEXTCHAR = convert(char, convert(tinyint, @CODECHAR) + 1);
set @INCREMENTNEXT = 0;
end
end
else if (@FORMATCHAR = '@') -- alpha
begin
if (@CODECHAR = 'Z' or @CODECHAR = '')
begin
set @NEXTCHAR = 'A';
set @INCREMENTNEXT = 1;
end
else
begin
set @NEXTCHAR = char(ascii(@CODECHAR) + 1);
set @INCREMENTNEXT = 0;
end
end
else if (@FORMATCHAR = '?') -- number or alpha
begin
if (@CODECHAR = '9')
begin
set @NEXTCHAR = 'A';
set @INCREMENTNEXT = 0;
end
else if (@CODECHAR = '')
begin
set @NEXTCHAR = '0';
set @INCREMENTNEXT = 1;
end
else if (@CODECHAR = 'Z')
begin
set @NEXTCHAR = '0'
set @INCREMENTNEXT = 1;
end
else if (isnumeric(@CODECHAR) = 1)
begin
set @NEXTCHAR = convert(char, convert(tinyint, @CODECHAR) + 1);
set @INCREMENTNEXT = 0;
end
else -- Is alpha character
begin
set @NEXTCHAR = char(ascii(@CODECHAR) + 1);
set @INCREMENTNEXT = 0;
end
end
else
begin
set @NEXTCHAR = @FORMATCHAR;
set @INCREMENTNEXT = 1;
end
end
else
set @NEXTCHAR = @CODECHAR;
set @STARTPOS = @STARTPOS - 1;
set @FORMATCHAR = substring(@FORMAT, @STARTPOS, 1);
set @CODECHAR = substring(@CODE, @STARTPOS, 1);
if (@CODECHAR = '')
set @INCREMENTNEXT = 1;
set @SOURCECODEPART = @NEXTCHAR + @SOURCECODEPART;
end
return @SOURCECODEPART;
end