我试图找出一个可以获得表结构深度的存储过程。请记住,桌面设计是在我的时间之前,不能改变。
当我说深度(精通)时,我指的是具有源自JobID的记录的最高节表。
我的SQL真的很生疏,所以我脑子里放了一个聪明的方法来返回给定的jobID记录的深度。
感谢任何帮助!
答案 0 :(得分:2)
如果您完全了解架构(如上所述),那么您可以简单地执行(针对单个JobID)。请注意,我已经扩充了每个表以便于COALESCE。
SELECT COALESCE(Section4.SecName
,Section3.SecName
,Section2.SecName
,Section1.SecName) AS DeepestSection
FROM (SELECT 'Section1' AS SecName, * FROM Section1) AS Section1
LEFT JOIN (SELECT 'Section2' AS SecName, * FROM Section2) AS Section2
ON Section2.Sect1ID = Section1.SectID
LEFT JOIN (SELECT 'Section3' AS SecName, * FROM Section3) AS Section3
ON Section3.Sect2ID = Section2.Sect2ID
LEFT JOIN (SELECT 'Section4' AS SecName, * FROM Section4) AS Section4
ON Section4.Sect3ID = Section3.Sec3tID
WHERE Section1.JobID = whatever
如果稍微改变一下,对所有工作进行分析。
如果此时尚未完全知道引用回流到JobID的表的数量,您将使用信息模式视图http://msdn.microsoft.com/en-us/library/ms186778.aspx - 使用它来遍历定义的约束并确定依赖关系 - 创建必要的SQL,以动态形式执行上述操作,然后执行它。