查找给定主键的一组相关表的深度

时间:2010-11-18 03:36:59

标签: sql stored-procedures

我试图找出一个可以获得表结构深度的存储过程。请记住,桌面设计是在我的时间之前,不能改变。

当我说深度(精通)时,我指的是具有源自JobID的记录的最高节表。

我的SQL真的很生疏,所以我脑子里放了一个聪明的方法来返回给定的jobID记录的深度。

感谢任何帮助!

SECTION1

| JobID - FK

| SectID - PK


第2节

| Sect1ID - FK

| Sect2ID - PK


Section3中

| Sect2ID - FK

| Sect3ID - PK


Section4

| Sect3ID - FK

| Sect4ID - PK

1 个答案:

答案 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,以动态形式执行上述操作,然后执行它。