При каких обстоятельствах родительская таблица может пропустить записи, на которые ссылаются активные внешние ключи в дочерних таблицах? - PullRequest
0 голосов
/ 06 марта 2020

Я в полном проигрыше.

У меня есть SQL Серверная база данных с центральной, наиболее важной таблицей, со многими, многими дочерними таблицами, имеющими внешний ключ отношения к нему. Проверка внешнего ключа включена во всех таблицах. Я просто запустил EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all", просто чтобы быть уверенным.

Тем не менее, каким-то образом есть записи в нескольких дочерних таблицах, которые имеют внешние ключи, ссылающиеся на 6 записей в родительской таблице, которые не существуют.

КАК ЭТО ВОЗМОЖНО?

Я запустил DB CC CHECKDB, чтобы посмотреть, возможно ли было повреждение базы данных, и я получил:

CHECKDB найдено 0 ошибок размещения и 0 ошибок согласованности в базе данных «xxxxxDev». DB CC выполнение завершено. Если DB CC напечатал сообщения об ошибках, обратитесь к системному администратору.

Что мне здесь не хватает? Как это может быть? Я "потрясен". enter image description here

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

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

0 голосов
/ 06 марта 2020

Спасибо "Piotr" ({ ссылка }) за ответ.

Разработчик добавил предикат в политику безопасности для этой таблицы (безопасность на уровне строк), которая была прячет ряды. Он никогда не удалял это, и я забыл, что это было там.

Я думал, что схожу с ума ...

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