UFN_MKTSEGMENTATIONFINDERNUMBER_GAPS
Returns a list of available finder number ranges.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN |
Definition
Copy
create function dbo.[UFN_MKTSEGMENTATIONFINDERNUMBER_GAPS]
(
@ID uniqueidentifier = null
)
returns @GAPS table([MIN] bigint primary key, [MAX] bigint)
as
begin
declare @START bigint;
select @START = (case when [CHECKDIGIT] = 1 then [LAST_FINDERNUMBER] - 1 else 0 end) from dbo.[MKTFINDERNUMBER];
--This is broken out into two statements for performance reasons...
if @ID is null
insert into @GAPS ([MIN], [MAX])
select
[FIRST].[MAX] + 1 as [MIN],
(
select min([SECOND].[MIN])
from dbo.[MKTSEGMENTATIONFINDERNUMBER] as [SECOND]
where [FIRST].[MAX] < [SECOND].[MIN]
and [FIRST].[MAX] != [SECOND].[MAX] - 1
) - 1 as [MAX]
from (
select null as [ID], 0 as [MIN], @START as [MAX]
union
select [ID], [MIN], [MAX] from dbo.[MKTSEGMENTATIONFINDERNUMBER] where [MAX] > @START
) as [FIRST]
where not exists(select * from dbo.[MKTSEGMENTATIONFINDERNUMBER] where [MIN] = [FIRST].[MAX] + 1);
else
insert into @GAPS ([MIN], [MAX])
select
[FIRST].[MAX] + 1 as [MIN],
(
select min([SECOND].[MIN])
from dbo.[MKTSEGMENTATIONFINDERNUMBER] as [SECOND]
where [FIRST].[MAX] < [SECOND].[MIN]
and [FIRST].[MAX] != [SECOND].[MAX] - 1
and [SECOND].[ID] != @ID
) - 1 as [MAX]
from (
select null as [ID], 0 as [MIN], @START as [MAX]
union
select [ID], [MIN], [MAX] from dbo.[MKTSEGMENTATIONFINDERNUMBER] where [MAX] > @START
) as [FIRST]
where not exists(select * from dbo.[MKTSEGMENTATIONFINDERNUMBER] where [MIN] = [FIRST].[MAX] + 1 and [ID] != @ID)
and ([FIRST].[ID] is null or [FIRST].[ID] != @ID);
return;
end