Как узнать, где ссылка на первичный ключ используется в SQL Server? - PullRequest
10 голосов
/ 10 июня 2011

У меня есть таблица в SQL Server 2008 R2 с первичным ключом с именем ID, которая затем используется несколькими таблицами вокруг базы данных в качестве внешнего ключа.Как узнать, по каким таблицам он используется?Я пытаюсь удалить эту запись, но жалуюсь, что ID используется.

Или, может быть, есть простой способ удалить все записи, на которые есть ссылки, из всей базы данных, просто присвоив базе данных ID?Прямо сейчас я собираюсь для каждой таблицы (которая, как я знаю, имеет этот идентификатор в качестве внешнего ключа) и удаляю записи, которые соответствуют этому конкретному идентификатору, но если есть лучший / более простой способ найти его и удалить все сразу с помощью простого кода, тогда это будетлучшая идея.

Ответы [ 4 ]

17 голосов
/ 10 июня 2011

MS SQL выигрывает от возможности описывать себя. В частности, существует ряд представлений, которые начинаются с INFORMATION_SCHEMA.

Чтобы получить представление о том, где используется ваше поле, попробуйте: -

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
6 голосов
/ 21 июля 2015
select constraintColumns.* from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as constraintColumns
inner join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as constraints on constraintColumns.CONSTRAINT_NAME = constraints.CONSTRAINT_NAME
inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE as keys on constraints.UNIQUE_CONSTRAINT_NAME = keys.CONSTRAINT_NAME
where keys.TABLE_NAME = 'yourTableWithThePrimaryKeyColumn';
4 голосов
/ 10 июня 2011

Посмотрите на таблицы sysobjects и sysforeignkeys , вы можете получить все внешние ключи, которые ссылаются на вашу таблицу.

Попробуйте это непроверенное утверждение:

select a.name as ConstraintName, f.name as FromTable, t.name as ToTable 
from sysobjects a, sysobjects f, sysobjects t, sysforeignkeys b
where a.id=b.constid and f.id=b.fkeyid and t.id=b.rkeyid and t.name= 'Yourtable'
1 голос
/ 10 июня 2011

просто сделайте соотношение каскад при удалении

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