Как получить все связи между всеми таблицами в SQL Server?
Есть ли способ получения связей между таблицами в SqlServer? Я пробовал использовать SELECT INFORMATION_SCHEMA.KEY_COLUMN_USAGE , так как этот способ работал в MySQL, но в SQLServer KEY_COLUMN_USAGE не имеет атрибутов REFERENCED_COLUMN_NAME и REFERENCED_TABLE_NAME .
Отслеживать
задан 25 мая 2021 в 18:12
195 9 9 бронзовых знаков
Например, EXEC sp_fkeys ‘TableName’ docs.microsoft.com/ru-ru/sql/relational-databases/… А вообще в базе sys есть дофига интересных таблиц.
25 мая 2021 в 18:19
select * from sys.foreign_keys
Просмотр зависимостей таблицы
Зависимости таблицы можно просмотреть в SQL Server с помощью SQL Server Management Studio или Transact-SQL.
Разрешения
Требуется VIEW DEFINITION разрешение на базу данных и SELECT разрешение sys.sql_expression_dependencies для базы данных. По умолчанию SELECT разрешение предоставляется только членам предопределенной роли базы данных db_owner . Когда SELECT и VIEW DEFINITION разрешения предоставляются другому пользователю, участник может просматривать все зависимости в базе данных.
Использование SQL Server Management Studio
Просмотр объектов, от которых зависит таблица
- В Обозревателе объектовразверните узел Базы данных, разверните саму базу данных, а затем разверните узел Таблицы.
- Щелкните таблицу правой кнопкой мыши и выберите пункт «Просмотр зависимостей«.
- В диалоговом окне Зависимости объектоввыберите либо Объекты, зависящие от, либо Объекты, от которыхзависит от.
- Выберите объект в сетке Зависимости . Тип объекта (например, «Триггер» или «Хранимая процедура») появится в поле Тип .
- Просмотр зависимостей с помощью зависимостей обозреватель объектов> View не поддерживается в Azure Synapse Analytics, вместо этого используйте sys.sql_expression_dependencies. Пулы SQL Azure Synapse Analytics поддерживают таблицы, представления, отфильтрованные статистические данные и типы хранимых процедур Transact-SQL из этого списка. Сведения о зависимости создаются и поддерживаются только для таблиц, представлений и отфильтрованной статистики.
Использование Transact-SQL
Просмотр объектов, зависящих от таблицы
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO SELECT * FROM sys.sql_expression_dependencies WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription'); GO
Просмотр зависимостей таблицы
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Следующий пример возвращает объекты, которые зависят от таблицы Production.Product . Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO SELECT * FROM sys.sql_expression_dependencies WHERE referenced_id = OBJECT_ID(N'Production.Product'); GO
Связанный контент
Как посмотреть связи таблиц sql
Для просмотра связей между таблицами в SQL можно использовать системную таблицу INFORMATION_SCHEMA . INFORMATION_SCHEMA содержит метаданные о базе данных, включая информацию о таблицах, столбцах и связях.
Чтобы просмотреть связи между таблицами, можно использовать запрос следующего вида:
SELECT tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name AND ccu.table_schema = tc.table_schema WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='имя_таблицы';
Здесь имя_таблицы — это имя таблицы, связи которой вы хотите просмотреть.
Этот запрос вернет список всех внешних ключей в таблице, включая имя ключа, имя таблицы, столбец таблицы, связанный с внешним ключом, имя таблицы, связанной с внешним ключом, и соответствующий столбец в этой таблице. Эти данные могут помочь вам понять, как связаны различные таблицы в вашей базе данных.
Как просмотреть связи таблицы в SQL?
Есть очень сложная и запутанная БД. Нужно просмотреть с какими таблицами связана целевая таблица. Как это можно сделать не зная их имен?
Очень желательно чтобы это было в удобной визуальной форме.
Интересен вариант решения для MySQL и PostgresSQL
- Вопрос задан более трёх лет назад
- 5608 просмотров
Комментировать
Решения вопроса 1
beduin01 @beduin01 Автор вопроса
Решил вопрос с помощью DbShema. Очень рекомендую.
Ответ написан более трёх лет назад
golshansky @golshansky
Подскажите пожалуйста как, я что-то не разобрался.
beduin01 @beduin01 Автор вопроса
golshansky: это приложение такое, скачайте его и откройте в нем БД.
golshansky @golshansky
beduin01: да я понял что это приложение))
Спасибо уже сам разобрался, всё круто, спасибо за наводку. Триальной версии Navicat Data Modeler мне с головой хватило, всё красиво нарисовала.
Ответы на вопрос 1
Для правильного вопроса надо знать половину ответа
Если связи организованы как внешние ключи, то в MySQL Workbench есть Reverse Engeneer, который на EER-диаграмме их показывает, в Navicat скорее всего тоже. Если связи были только в голове разработчика, значит смотрите все таблицы и по названиям полей пытаетесь догадаться, что есть что.