smodak@ats360.com Ответов: 1

Получите таблицы сопоставления между двумя таблицами.


Привет,

У меня есть 3 таблицы в sql, как показано ниже(только для примера). В этой таблице а непосредственно не связана с таблицей С. Между таблицами а и С находится таблица сопоставления в.
При динамическом построении запроса в C#.net у меня будет только информация о таблицах A и C. Есть ли какой-либо способ в sql, где я могу найти соединительные таблицы между A и C.
Поскольку я создаю запрос динамически, между двумя таблицами может быть n чисел таблиц сопоставления.
Есть ли какой-нибудь способ найти соединительные таблицы между двумя таблицами?

Таблица первичный ключ внешний ключ
ИДЕНТИФИКАТОР
Б РАСПРЕДЕЛЕНИЯ A_ID B_ID
З. ОСНОВНЫЕ ДОСТИЖЕНИЯ И ИТОГОВЫЕ ДОКУМЕНТЫ B_ID


Спасибо
Сампада

Что я уже пробовал:

Я попытался получить эту информацию с помощью схемы. но не в состоянии получить точный результат.

Tomas Takac

Да, это определенно возможно, используя таблицы схем. Но это кажется подозрительным. Вы уверены, что другого пути нет? Кстати, поместите свой текущий код в раздел "Что я пробовал".

smodak@ats360.com

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

1 Ответов

Рейтинг:
1

CHill60

Вы должны использовать sys просмотры для получения этой информации

Выберите t2.name как TableReferenced,
t.name как TableWithForeignKey,
c.name как ForeignKeyColumn,
object_name (constraint_object_id) как FK_Name
из представления sys.foreign_key_columns как ФК
внутреннее соединение sys.таблиц а т о ФК.аргумент parent_object_id = Т.аргумент object_id
внутреннее соединение sys.столбцы C в ФК.аргумент parent_object_id = гр.object_id и ФК.parent_column_id = гр.идентификатором column_id
внутреннее соединение sys.таблицы Т2 на ФК.referenced_object_id=Т2.аргумент object_id
где t2.name = "сотрудники"
заказ на 1, 2
[Примечание<pre & gt; теги намеренно опущены до тех пор, пока ошибка сайта не будет исправлена]

Еще лучше было бы использовать инструмент построения диаграмм базы данных для документирования вашей базы данных


smodak@ats360.com

Спасибо за ответ

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

CHill60

Приведем пример: приведенный выше запрос дает вам почти достаточно информации для формирования SQL-запроса - все, что отсутствует, - это первичный ключ для базовой таблицы (в приведенном выше примере "сотрудники")

smodak@ats360.com

Пожалуйста, рассмотрите приведенный пример структуры таблиц A, B и C.
Если я напишу запрос следующим образом
Выберите t2.name как TableReferenced,
t.name как TableWithForeignKey,
c.name как ForeignKeyColumn,
object_name (constraint_object_id) как FK_Name
из представления sys.foreign_key_columns как ФК
внутреннее соединение sys.таблиц а т о ФК.аргумент parent_object_id = Т.аргумент object_id
внутреннее соединение sys.столбцы C в ФК.аргумент parent_object_id = гр.object_id и ФК.parent_column_id = гр.идентификатором column_id
внутреннее соединение sys.таблицы Т2 на ФК.referenced_object_id=Т2.аргумент object_id
где t2.name = 'A'
заказ на 1, 2

Он дает мне только справочную информацию по внешнему ключу таблицы B. Я не мог получить информацию о таблице C. Которые связаны с таблицей В. Иерархий может быть n. Я хочу что-то вроде того, что я мог бы предоставить таблицы A и C для запроса, и это даст информацию о таблице B.

CHill60

Попробуйте использовать where t2.name IN ('A','B') и посмотрите, что вы получите тогда