Нахождение глубины набора связанных таблиц для данного Первичного ключа - PullRequest
0 голосов
/ 18 ноября 2010

Я пытаюсь выяснить хранимую процедуру, которая может получить глубину структуры таблицы.Имейте в виду, что дизайн таблицы был раньше моего времени и не может быть изменен.

Когда я говорю глубина (для разработки), я имею в виду таблицу с самым высоким разделом, в которой есть запись, полученная из JobID.

Я действительно разбираюсь в своем SQL, поэтому я пытаюсь найти способ найти глубину заданной записи jobID.

Любая помощь приветствуется!

Section1

| JobID - FK

| SectID - PK


Section2

| Sect1ID - FK

| Sect2ID - PK


Section3

| Sect2ID- FK

| Sect3ID - PK


Section4

| Sect3ID - FK

| Sect4ID - PK

1 Ответ

2 голосов
/ 18 ноября 2010

Если схема вам полностью известна (как указано выше), то вы можете просто это сделать (для одного 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 для выполнения вышеуказанного в динамической форме и последующее его выполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...