Для ограничений внешнего ключа сначала необходимо выполнить удаление из дочерних таблиц.
Это будет примерно так, поскольку у вас уже есть идентификаторы StudentID, объединение с родительской таблицей не требуется.
Delete child1 Where studentID not in (1,2,4,5,6,77,122,123,1222,12121,99999)
Delete child2 Where studentID not in (1,2,4,5,6,77,122,123,1222,12121,99999)
Delete child3 Where studentID not in (1,2,4,5,6,77,122,123,1222,12121,99999)
Delete students Where studentID not in (1,2,4,5,6,77,122,123,1222,12121,99999)
Если у вас есть таблица «внуков», например «Ученик» -> «Учетная запись» -> «AccountHistory»), вы удалите ее в обратном порядке, например:
Delete AccountHitory
where AccountID not in (
select AccountID
From Account
Where studentID in (1,2,4,5,6,77,122,123,1222,12121,99999))
Delete Account Where studentID not in (1,2,4,5,6,77,122,123,1222,12121,99999)
Delete Student Where studentID not in (1,2,4,5,6,77,122,123,1222,12121,99999)
НайтиИз иерархии ссылок внешнего ключа вы можете использовать этот запрос
Образцы таблиц
create table student (studentid int identity primary key)
create table student_class (id int primary key, studentid int references student(studentid))
create table student_class_attendance (student_classid int references student_class(id), attended datetime)
create table invoice (id int primary key, studentid int references student(studentid), due datetime, amount money)
Запрос для поиска связанных таблиц
;with tmp(lvl,FK,PK) As (
SELECT 1, FK.TABLE_NAME, PK.TABLE_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
WHERE PK.TABLE_NAME = 'student'
UNION ALL
SELECT lvl+1, FK.TABLE_NAME, PK.TABLE_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 tmp on tmp.FK = PK.TABLE_NAME
)
SELECT *
FROM tmp
order by lvl desc