USP_DATALIST_ORGANIZATIONHIERARCHYINVALIDPOSITION
This datalist returns all invalid positions from a given hierarchy.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ORGANIZATIONHIERARCHY | xml | IN | Hierarchy |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_ORGANIZATIONHIERARCHYINVALIDPOSITION
(
@ORGANIZATIONHIERARCHY xml = null
)
as
set nocount on;
-- build a temporary table containing the values from the XML
declare @TempTbl table (
[ID] uniqueidentifier,
[POSITIONID] uniqueidentifier,
[CONSTITUENTID] uniqueidentifier,
[DATEFROM] datetime,
[DATETO] datetime
)
declare @idoc int;
exec sp_xml_preparedocument @idoc output, @ORGANIZATIONHIERARCHY;
insert into @TempTbl
select
ID,
POSITIONID,
CONSTITUENTID,
DATEFROM,
DATETO
from openxml(@idoc, '/ORGANIZATIONHIERARCHY/ITEM/POSITIONHOLDERS/ITEM', 2)
with(
POSITIONID uniqueidentifier '../../ID',
ID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
DATEFROM datetime,
DATETO datetime
)
exec sp_xml_removedocument @idoc;
select OPH.ID, OPH.POSITIONID, CONSTITUENT.NAME
from @TempTbl OPH
inner join dbo.CONSTITUENT
on OPH.CONSTITUENTID = CONSTITUENT.ID
where exists(
select top 1
SUB.ID
from
@TempTbl SUB
where
SUB.CONSTITUENTID = OPH.CONSTITUENTID and
SUB.ID <> OPH.ID and
(
(SUB.DATETO between OPH.DATEFROM and OPH.DATETO) or
(OPH.DATETO between SUB.DATEFROM and SUB.DATETO) or
(SUB.DATEFROM between OPH.DATEFROM and OPH.DATETO) or
(OPH.DATEFROM between SUB.DATEFROM and SUB.DATETO) or
(SUB.DATEFROM is null and OPH.DATEFROM <= SUB.DATETO) or
(OPH.DATEFROM is null and SUB.DATEFROM <= OPH.DATETO) or
(SUB.DATETO is null and OPH.DATETO >= SUB.DATEFROM) or
(OPH.DATETO is null and SUB.DATETO >= OPH.DATEFROM) or
(OPH.DATEFROM is null and SUB.DATEFROM is null) or
(OPH.DATETO is null and SUB.DATETO is null) or
(OPH.DATEFROM is null and OPH.DATETO is null) or
(SUB.DATEFROM is null and SUB.DATETO is null)
)
)