UFN_MKTSOURCECODE_SOURCECODEISVALID
Returns whether or not a source code is valid for the specified source code layout.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SOURCECODEID | uniqueidentifier | IN | |
@SOURCECODE | nvarchar(50) | IN |
Definition
Copy
CREATE function dbo.[UFN_MKTSOURCECODE_SOURCECODEISVALID]
(
@SOURCECODEID uniqueidentifier,
@SOURCECODE nvarchar(50)
)
returns bit
as
begin
declare @VALID bit = 1;
declare @SOURCECODEPARTDEFINITIONID uniqueidentifier;
declare @ITEMTYPECODE tinyint;
declare @LENGTH int;
declare @DELIMLENGTH int = 0;
declare @TOTALLENGTH int = 0;
declare @FORMAT nvarchar(10);
declare @CODE nvarchar(10);
declare @START int = 1;
--Loop through each part of the source code so that we can validate each part...
declare PARTCURSOR cursor local fast_forward for
select
[MKTSOURCECODEPARTDEFINITION].[ID],
[MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE],
[MKTSOURCECODEITEM].[LENGTH],
(select max(len([SCPDV].[DELIM]))
from dbo.[MKTSOURCECODEPARTDEFINITIONVALUES] as [SCPDV]
inner join dbo.[MKTSOURCECODEVALIDPARTVALUES] as [SCVPV] on [SCVPV].[MKTSOURCECODEPARTDEFINITIONVALUESID] = [SCPDV].[ID]
inner join dbo.[MKTSOURCECODEITEM] as [SCI] on [SCI].[ID] = [SCVPV].[MKTSOURCECODEITEMID] and [SCI].[MKTSOURCECODEPARTDEFINITIONID] = [SCPDV].[MKTSOURCECODEPARTDEFINITIONID]
where [SCPDV].[MKTSOURCECODEPARTDEFINITIONID] = [MKTSOURCECODEPARTDEFINITION].[ID]
and [SCI].[SOURCECODEID] = [MKTSOURCECODEITEM].[SOURCECODEID])
from dbo.[MKTSOURCECODEITEM]
inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where [MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEID
order by [MKTSOURCECODEITEM].[SEQUENCE];
open PARTCURSOR;
fetch next from PARTCURSOR into @SOURCECODEPARTDEFINITIONID, @ITEMTYPECODE, @LENGTH, @DELIMLENGTH;
while (@@FETCH_STATUS = 0 and @VALID = 1)
begin
set @TOTALLENGTH += @LENGTH + @DELIMLENGTH;
set @CODE = substring(@SOURCECODE, @START, @LENGTH);
set @VALID = (case when dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUES_GETIDFROMCODE](@SOURCECODEID, @CODE, @ITEMTYPECODE, @SOURCECODEPARTDEFINITIONID) is not null then 1 else 0 end);
set @START += @LENGTH + @DELIMLENGTH;
fetch next from PARTCURSOR into @SOURCECODEPARTDEFINITIONID, @ITEMTYPECODE, @LENGTH, @DELIMLENGTH;
end
close PARTCURSOR;
deallocate PARTCURSOR;
if @VALID = 1 and len(@SOURCECODE) <> (@TOTALLENGTH - @DELIMLENGTH)
set @VALID = 0;
return @VALID;
end