Найти все связанные объекты в базе данных
Есть следующий кейс: пользователь удаляет в системе некоторую сущность, на которую в системе имеются ссылки, например:
Имеются два справочника (таблицы в базе):
Addresses: ID, Title
Territories: ID, Name, AddressId
При удалении адреса пользователь должен получить предупреждение о том, что данный адрес используется в справочнике территорий в строке с ID таким-то.
Это должно работать на уровне всей системы. То есть имеется множество справочников, они ссылаются друг на друга через Foreign Key, и при удалении какого-либо элемента из справочника пользователь получает уведомление, что на данный объект ссылаются следующие объекты: [Справочник такой-то; ИД объекта в справочнике такой-то].
На уровне базы данных добавлены constraints, чтобы не нарушалась целостность данных.
В настоящий момент момент нашёл такой скрипт, который возвращает
INSERT INTO @ref (PK_Table, PK_Column, FK_Table, FK_Column)
SELECT PK_Table = PK.TABLE_NAME, PK_Column = PT.COLUMN_NAME, FK_Table = FK.TABLE_NAME, FK_Column = CU.COLUMN_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT t1.TABLE_NAME, t2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS t1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE t2 ON t1.CONSTRAINT_NAME = t2.CONSTRAINT_NAME
WHERE t1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
Скрипт возвращает данные в следующем виде:
То есть на таблицу BusinessCardRequests (поле [ID]) ссылаются две таблицы: BusinessCardOrderRequests, BusinessCardRequestStatuses (поле [RequestId]).
Далее на основе этих данных пытаюсь динамически построить скрипт, который вернет нужные данные, например в следующем виде:
То есть на объект из таблицы BusinessCardRequests, например, с ИД = 10 ссылаются следующие объекты в таблицах:
Есть идеи как это можно сделать проще и лучше?

