163 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
| Declare @TopSections Table
 | |
| (
 | |
| 	VersionID int,
 | |
| 	ProcID int,
 | |
| 	ItemID int Primary Key,
 | |
| 	ContentID int,
 | |
| 	Level int,
 | |
| 	FormatID int,
 | |
| 	Type int
 | |
| );
 | |
| 	with Itemz([VersionID], ProcID, [ItemID], [ContentID], [Level]) as 
 | |
| 	(Select DV.VersionID, DV.ItemID ProcID, [I].[ItemID], [I].[ContentID], 0
 | |
| 		FROM [Items] I
 | |
| 		JOIN vefn_DocVersionSplit('') DV ON I.[ItemID] = DV.[ItemID]
 | |
| 	Union All
 | |
| 	-- Children
 | |
| 		select Z.VersionID, Z.ProcID, I.[ItemID], I.[ContentID], Z.Level+1
 | |
| 		from Itemz Z
 | |
| 		join Parts P on P.ContentID = Z.ContentID
 | |
| 		join Items I on I.ItemID = P.ItemID
 | |
| 		join Contents C ON I.ContentID = C.contentID
 | |
| 		Where Type < 20000
 | |
| 	Union All
 | |
| 	-- Siblings
 | |
| 		select Z.VersionID, case when z.ProcID = z.ItemID then I.ItemID else Z.ProcID end ProcID, I.[ItemID], I.[ContentID], Z.Level
 | |
| 		from Itemz Z
 | |
| 		join Items I on I.PreviousID = Z.ItemID
 | |
| 	)
 | |
| 	insert into @TopSections
 | |
| 	select ZZ.VersionID, ZZ.ProcID, ZZ.[ItemID], ZZ.[ContentID], ZZ.[Level], VI.[FormatID], CC.Type
 | |
| 	 from ItemZ ZZ
 | |
| 	 Join vefn_GetVersionFormatItems('') VI ON ZZ.ItemID=VI.ItemID
 | |
| 	 Join Contents CC ON ZZ.ContentID=CC.ContentID
 | |
| 	 Where Level > 0
 | |
| 	OPTION (MAXRECURSION 10000)
 | |
| 
 | |
| DECLARE @Procedures TABLE (
 | |
| 	VersionID int,
 | |
| 	ProcID int primary key,
 | |
| 	PContentID int ,
 | |
| 	SectionStart int
 | |
| )
 | |
| Insert into @Procedures
 | |
| Select VersionID, ItemId, ContentID, xProcedure.value('@SectionStart','int') SectionStart From
 | |
| (Select VI.VersionID,VI.ItemID,VI.ContentID,Cast(Config as xml) xConfig
 | |
|  from VEFN_GetVersionItems('') VI
 | |
| Join Contents CC ON CC.ContentID = VI.ContentID
 | |
| where type = 0) T1
 | |
| outer apply xConfig.nodes('//Procedure') tProcedure(xProcedure)
 | |
| 
 | |
| DECLARE @SectionFormats TABLE
 | |
| (
 | |
| 	FormatID int,
 | |
| 	Name nvarchar(50),
 | |
| 	Description nvarchar(255),
 | |
| 	Type int,
 | |
| 	IsStepSection	nvarchar(10),
 | |
| 	SectionFormat nvarchar(255),
 | |
| 	NumberingSequence int
 | |
| )
 | |
| Insert Into @SectionFormats
 | |
| Select FormatID, Name, Description
 | |
| ,xDocStyle.value('@Index','int')+10000 Type
 | |
| ,xDocStyle.value('@IsStepSection','nvarchar(10)') IsStepSection
 | |
| ,xDocStyle.value('@Name','nvarchar(255)') SectionFormat
 | |
| ,xDocStyle.value('@NumberingSequence','int') NumberingSequence
 | |
|  from Formats 
 | |
|  outer apply data.nodes('//DocStyle') tDocStyle(xDocStyle)
 | |
| where FormatID in(Select formatid from @TopSections)
 | |
| 
 | |
| DECLARE @OriginalSteps Table
 | |
| (
 | |
| 	VersionID int,
 | |
| 	ProcID int,
 | |
| 	ItemID int,
 | |
| 	ContentID int,
 | |
| 	Level int,
 | |
| 	FormatID int,
 | |
| 	Type int
 | |
| --	,OriginalSteps char(1)
 | |
| )
 | |
| Insert Into @OriginalSteps
 | |
| Select VersionID,	ProcID,	ItemID,	ContentID,	Level,	FormatID,Type
 | |
| --,isnull(xSection.value('@OriginalSteps','char(1)'),'N') OriginalSteps 
 | |
| From
 | |
| (Select TS.*, cast(config as xml) xConfig From @TopSections TS
 | |
| Join Contents CC ON TS.ContentID=CC.ContentID) T1
 | |
| Outer apply xConfig.nodes('//Section') tSection(xSection)
 | |
| where isnull(xSection.value('@OriginalSteps','char(1)'),'N') ='Y'
 | |
| 
 | |
| --Select * from @OriginalSteps
 | |
| Declare @MultipleOriginalSteps TABLE
 | |
| (
 | |
| 	ProcID int primary Key,
 | |
| 	HowMany int
 | |
| )
 | |
| insert into @MultipleOriginalSteps
 | |
| select ProcID, Count(*) Howmany from @OriginalSteps Group by ProcID Having count(*) > 1
 | |
| 
 | |
| 
 | |
| select SectionStartStatus, OriginalStepStatus, min(procid) minprocid, Count(*) Howmany from (
 | |
| Select PP.*, dbo.ve_getShortPath(SectionStart) PathToSectionStart, SSTS.ItemID, SSTS.FormatID, SSSF.IsStepSection, SSTS.Level
 | |
| , isnull(OSExact.ItemID,OS.ItemID) OSItemID, MOS.ProcID MProcId,ossf.IsStepSection OSIsStepSection
 | |
| ,case when PP.SectionStart is null THEN 'None' 
 | |
|       When SSTS.ItemID is null THEN 'NotSection'
 | |
| 			When SSTS.ProcID != PP.ProcID then 'NotInProc'
 | |
| 			When SSTS.Level > 1 then 'NotTopLevel'
 | |
| 			When SSSF.IsStepSection = 'false' then 'NotStepSection'
 | |
| 			When OSExact.ProcID is null THEN 'Different'
 | |
| 			else 'Exact' end SectionStartStatus
 | |
| ,case when isnull(OSExact.ItemID,OS.ItemID) is null then 'None'
 | |
| 			when MOS.ProcID is not null THEN 'MultipleOS'
 | |
| 			When OSSF.IsStepSection = 'false' then 'NotStepSection'
 | |
| 			When OSExact.ProcID is null THEN 'Different'
 | |
| 			else 'Exact' end OriginalStepStatus
 | |
|  from @Procedures PP
 | |
| Left Join @TopSections SSTS ON PP.SectionStart = SSTS.ItemID
 | |
| Left Join @SectionFormats SSSF ON SSTS.FormatID= SSSF.FormatID and SSTS.Type=SSSF.Type
 | |
| Left Join @MultipleOriginalSteps MOS ON pp.ProcID = MOS.ProcID 
 | |
| Left Join @OriginalSteps OSExact ON OSExact.ProcID=pp.ProcID and OSExact.ItemID=pp.SectionStart
 | |
| Left Join (select * from @OriginalSteps Where ProcID Not In (Select Procid from @MultipleOriginalSteps)) OS ON OS.ProcID = pp.procid
 | |
| Left Join @SectionFormats OSSF ON isnull(OSExact.FormatID,OS.FormatID)= OSSF.FormatID and isnull(OSExact.Type,OS.Type)=OSSF.Type
 | |
| ) T1 Group by SectionStartStatus, OriginalStepStatus
 | |
| 
 | |
| 
 | |
| Select PP.*, dbo.ve_getShortPath(SectionStart) PathToSectionStart, SSTS.ItemID, SSTS.FormatID, SSSF.IsStepSection, SSTS.Level
 | |
| , isnull(OSExact.ItemID,OS.ItemID) OSItemID, MOS.ProcID MProcId,ossf.IsStepSection OSIsStepSection
 | |
| ,case when PP.SectionStart is null THEN 'None' 
 | |
|       When SSTS.ItemID is null THEN 'NotSection'
 | |
| 			When SSTS.ProcID != PP.ProcID then 'NotInProc'
 | |
| 			When SSTS.Level > 1 then 'NotTopLevel'
 | |
| 			When SSSF.IsStepSection = 'false' then 'NotStepSection'
 | |
| 			When OSExact.ProcID is null THEN 'Different'
 | |
| 			else 'Exact' end SectionStartStatus
 | |
| ,case when isnull(OSExact.ItemID,OS.ItemID) is null then 'None'
 | |
| 			when MOS.ProcID is not null THEN 'MultipleOS'
 | |
| 			When OSSF.IsStepSection = 'false' then 'NotStepSection'
 | |
| 			When OSExact.ProcID is null THEN 'Different'
 | |
| 			else 'Exact' end OriginalStepStatus
 | |
|  from @Procedures PP
 | |
| Left Join @TopSections SSTS ON PP.SectionStart = SSTS.ItemID
 | |
| Left Join @SectionFormats SSSF ON SSTS.FormatID= SSSF.FormatID and SSTS.Type=SSSF.Type
 | |
| Left Join @MultipleOriginalSteps MOS ON pp.ProcID = MOS.ProcID 
 | |
| Left Join @OriginalSteps OSExact ON OSExact.ProcID=pp.ProcID and OSExact.ItemID=pp.SectionStart
 | |
| Left Join (select * from @OriginalSteps Where ProcID Not In (Select Procid from @MultipleOriginalSteps)) OS ON OS.ProcID = pp.procid
 | |
| Left Join @SectionFormats OSSF ON isnull(OSExact.FormatID,OS.FormatID)= OSSF.FormatID and isnull(OSExact.Type,OS.Type)=OSSF.Type
 | |
| 
 | |
| 
 | |
| /*
 | |
| Select VersionID,GrandParentName,ParentName,FolderName,[Good],[None],[NotInProc],[NotSection],[NotTopLevel]
 | |
| FROM (Select VN.*, PP.ProcID 
 | |
| ,case when PP.SectionStart is null THEN 'None' 
 | |
|       When TS.ItemID is null THEN 'NotSection'
 | |
| 			When TS.ProcID != PP.ProcID then 'NotInProc'
 | |
| 			When Level > 1 then 'NotTopLevel'
 | |
| 			else 'Good' end SectionStartStatus
 | |
|  from @Procedures PP 
 | |
| Left Join @TopSections TS ON PP.SectionStart = TS.ItemID 
 | |
| Join VEFN_GetVersionNames() VN ON VN.VersionID = PP.VersionID) P1
 | |
| PIVOT(COUNT(ProcID) FOR SectionStartStatus IN ( [Good],[None],[NotInProc],[NotSection],[NotTopLevel]))
 | |
| AS P2
 | |
| Order By VersionID
 | |
| */ |