AS
BEGIN
SET NOCOUNT ON


IF OBJECT_ID('dbo.cacheEZViewer_Usage_SQLTables') IS NOT NULL  DROP TABLE dbo.cacheEZViewer_Usage_SQLTables
 SELECT
	   c.SqlTableID,
	   c.TableName,
	   c.Description,
	   c.StatementStartRow,
	   c.StatementStartColumn,
	   c.StatementEndRow,
	   c.StatementEndColumn,
	   pth1.PathStr AS StmtPathStr,
	   c.ProgramName,
	   c.ProgramID,
	   c.ProgramTypeID,
	   pth2.PathStr AS ProgramPath,
	   c.ProgStartRow,
	   c.ProgStartCol,
	   c.ProgEndRow,
	   c.ProgEndCol,
	   c.Ancestor,
	   c.AncestorID,
	   c.AncestorTypeID
     INTO dbo.cacheEZViewer_Usage_SQLTables
     FROM
			    (   SELECT
					   core.SqlTableID,
					   core.TableName,
					   core.Description,
					   core.StartRow AS StatementStartRow,
					   core.StartCol AS StatementStartColumn,
					   core.EndRow AS StatementEndRow,
					   core.EndCol AS StatementEndColumn,
					   core.PathID AS StmtPathID,
					   prog.ProgramName,
					   prog.ProgramID,
					   prog.ProgramTypeID,
					   prog.PathID AS ProgramPathID,
					   prog.StartRow AS ProgStartRow,
					   prog.StartCol AS ProgStartCol,
					   prog.EndRow AS ProgEndRow,
					   prog.EndCol AS ProgEndCol,
					   prog.Ancestor,
					   prog.AncestorID,
					   prog.AncestorTypeID
					   FROM (
							 SELECT
								    os.ProgID,
								    os.PathID,
								    os.StartRow,
								    os.StartCol,
								    os.EndRow,
								    os.EndCol,
								    sr.ResourceID,
								    st.Description,
								    res.SqlTableID,
					                   res.TableName
							 FROM dbo.StatementReference sr
								  INNER JOIN dbo.OccurrencesStmt os ON sr.OccurID = os.OccurID
								  INNER JOIN dbo.Statements st ON sr.StatementType = st.StatementType
								  INNER JOIN SqlTables res ON res.SqlTableID = sr.ResourceID AND res.szDataBase = '1'
							 WHERE sr.ResourceType = 1
								   AND  os.PathID IS NOT NULL
						    )core
							INNER JOIN ( -- programs
										SELECT p.ProgramID, p.ProgramName, p.ProgramTypeID, p.Ancestor,
											  occ.StartRow, occ.StartCol, occ.EndRow, occ.EndCol
											 ,occ.PathID
											 ,pa.ProgramID AS AncestorID, pa.ProgramTypeID AS AncestorTypeID
										   FROM dbo.Occurrences occ
											    INNER JOIN (SELECT p1.ProgramID, AliasName as ProgramName, Ancestor, ProgramTypeID, OccurID FROM dbo.Programs p1 INNER JOIN dbo.ProgramAliases p2 ON p1.ProgramID = p2.ProgramID and p2.AliasType = 0) p ON p.OccurID = occ.OccurID AND p.ProgramTypeID IN (1,2,15,16)
											    LEFT OUTER JOIN (SELECT DISTINCT p1.ProgramID, AliasName as ProgramName, Ancestor, ProgramTypeID, OccurID FROM dbo.Programs p1 INNER JOIN dbo.ProgramAliases p2 ON p1.ProgramID = p2.ProgramID) pa ON  pa.ProgramName = p.Ancestor AND pa.ProgramTypeID = 8
										   WHERE occ.PathID IS NOT NULL
									 ) prog ON core.ProgID = prog.ProgramID
						   GROUP BY core.SqlTableID, core.TableName, core.Description,
								  core.StartRow , core.StartCol, core.EndRow, core.EndCol, core.PathID,
								  prog.ProgramName, prog.ProgramID,  prog.ProgramTypeID, prog.PathID,  prog.StartRow, prog.StartCol, prog.EndRow, prog.EndCol, prog.Ancestor,
								  prog.AncestorID, prog.AncestorTypeID
			
		  )c
		   LEFT OUTER JOIN  dbo.Paths pth1 ON pth1.PathID = c.StmtPathID
		   LEFT OUTER JOIN  dbo.Paths pth2 ON pth2.PathID = c.ProgramPathID


END
