SQL Server: список внешних ключей на определенную таблицу
Быстрый ответ
Чтобы получить список всех внешних ключей, которые ссылки содержат ссылку на конкретную таблицу, можно применить следующий SQL-запрос:
SELECT
fk.name AS ForeignKey,
tp.name AS TableWithFK
FROM
sys.foreign_keys fk
JOIN
sys.tables tp ON fk.parent_object_id = tp.object_id
JOIN
sys.tables ref ON fk.referenced_object_id = ref.object_id
WHERE
ref.name = 'YourTable' -- замените на имя вашей таблицы
ORDER BY
TableWithFK, ForeignKey;
Этот запрос выведет имена (ForeignKey
) внешних ключей и их соответствующие таблицы (TableWithFK
).
Системные хранимые процедуры: как получить список внешних ключей мгновенно
Для того чтобы сразу же увидеть все внешние ключи, ссылающиеся на вашу таблицу, используйте системную хранимую процедуру sp_fkeys
:
EXEC sp_fkeys @pktable_name = 'YourTable', @pktable_owner = 'dbo' -- укажите схему и имя вашей таблицы
Таким образом, вы сможете вывести имена связанных таблиц, столбцов и получить другую важную информацию. Для работы с несколькими схемами нужно указать параметр @pktable_owner
, чтобы предоставить точные результаты.
Сценарии для углубленного изучения
Для детального из изучения связей внешних ключей может быть полезен следующий SQL-скрипт:
SELECT
o.name AS FK_name,
SCHEMA_NAME(o.schema_id) AS SchemaName,
t.name AS TableName,
c.name AS ColumnName,
SCHEMA_NAME(rt.schema_id) AS ReferencedSchemaName,
rt.name AS ReferencedTableName,
rc.name AS ReferencedColumnName
FROM
sys.foreign_key_columns fk
INNER JOIN
sys.objects o ON fk.constraint_object_id = o.object_id
INNER JOIN
sys.tables t ON fk.parent_object_id = t.object_id
INNER JOIN
sys.columns c ON fk.parent_object_id = c.object_id AND fk.parent_column_id = c.column_id
INNER JOIN
sys.tables rt ON fk.referenced_object_id = rt.object_id
INNER JOIN
sys.columns rc ON fk.referenced_object_id = rc.object_id AND fk.referenced_column_id = rc.column_id
WHERE
rt.name = 'YourTable' -- замените на имя вашей таблицы
ORDER BY
SchemaName, TableName, FK_name, ColumnName; -- сортировка для удобства
Этот скрипт позволяет получить подробный обзор внешних ключей, определяя соответствующие столбцы, в формате удобном для работы.
Предосторожности перед вносом изменений
Пред началом глобальных изменений, таких как удаление таблицы, необходимо выяснить связи и зависимости, чтобы сохранить целостность данных:
EXEC sp_help 'YourTable'; -- ничего не вредит так, как упущенная зависимость
Эта хранимая процедура предоставляет детальную картину зависимостей внешних ключей для детального анализа перед принятием решения об их удалении.
Визуализация
Для визуализации внешних ключей, которые ссылаются на таблицу, можно представить замок (🏰). Попробуем найти все мосты (🌉), которые ведут к нему:
(🏭) --🌉--> 🏰
(🏠) --🌉--> 🏰
(🏛️) --🌉--> 🏰
Каждый мост — это внешний ключ из другой таблицы (🏭
, 🏠
, 🏛️
), который ссылается на основной замок (🏰
).
**Выявляем мосты** (внешние ключи):
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferencedTable
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
WHERE OBJECT_NAME(f.referenced_object_id) = 'CastleTable'
После выполнения этого запроса мы видим все пути, которые ведут к нашему замку (🏰), в базе данных королевства.
Целевые решения по конкретным запросам
В зависимости от специфических запросов к базе данных, возможно, вам потребуется адаптировать эти скрипты:
- Фильтрация по схеме: Дополнительные условия
WHERE
могут помочь фильтровать результаты, относящиеся к определённой схеме. - Создание дерева зависимостей: Вы можете создать дерево зависимостей, рекурсивно соединяя объект
sys.foreign_keys
. - Интеграция с визуальными инструментами: Эти скрипты могут быть интегрированы в графические среды, такие как SSMS или ApexSQL Search, для лучшего визуального представления объектов и их зависимостей.
Проверка совместимости с различными версиями SQL Server
Убедитесь, что ваша версия сервера поддерживает все представленные методы. Например, SQL Server 2008 может не поддерживать некоторые функции, доступные в более новых версиях, но эти скрипты разработаны так, чтобы быть эффективными на любой версии.
Полезные материалы
- sys.foreign_keys (Transact-SQL) – SQL Server | Microsoft Learn — Детальная документация о представлении
sys.foreign_keys
. - sys.foreign_key_columns (Transact-SQL) – SQL Server | Microsoft Learn — Важная информация о соответствии столбцов внешних ключей в SQL Server.
- How can I list all foreign keys referencing a given table in SQL Server? – Stack Overflow — Вопрос, заданный сообществом, с множеством детальных ответов на тему перечисления внешних ключей.
- SQL Server: How to Check for Foreign Key References – Brent Ozar Unlimited® — Несмотря на то, что информация на странице в данный момент недоступна, это источник знаний, если вновь станет доступной.
- Working with foreign key relationships in SQL Server – SQL Shack — Сейчас вы увидите ошибку "Страница не найдена", но в будущем страница может стать источником ценной информации, если её доступ восстановят.