Добрый день!
При сохранении записи в детали средства связи возникают странные ошибки. Метод сохранения вызывает BatchQuery для Update сохраняемой записи.
Однако при исполнении данного скрипта возникает следующая ошибка:
Конфликт инструкции DELETE с ограничением REFERENCE "FK4eIKa4vC33vluosjyKmFjgDPk3o". Конфликт произошел в базе данных "ArdshinBank7102-2", таблица "dbo.AppFormCommunication", column 'ContactCommunicationId'. ↵Выполнение данной инструкции было прервано."
Непонятно, каким образом возникло удаление, если выполнялся скрипт на модификацию записи.
Посмотрел событийные процессы объекта ContactCommunication, нигде нет удаления.
Подскажите, в какую сторону смотреть для решения ошибки.
Нравится
вот вам скрипт поиска зависимостей по ключу
SELECT C.CONSTRAINT_NAME, PK.TABLE_NAME, CCU.COLUMN_NAME, FK.TABLE_NAME, CU.COLUMN_NAME, C.UPDATE_RULE, C.DELETE_RULE 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 INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU ON PK.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME WHERE FK.CONSTRAINT_TYPE = 'FOREIGN KEY' AND c.[CONSTRAINT_NAME] like '%KEY' ORDER BY PK.TABLE_NAME, FK.TABLE_NAME;
Вместо '%Key' -> '%FK4eIKa4vC33vluosjyKmFjgDPk3o' и смотрите какая колонка от какой зависит.
И насколько я понимаю update = delete->insert в sql
Так откуда зависимость, как раз понятно из сообщения: в другой таблице AppFormCommunication есть ссылка ContactCommunicationId. Но почему при изменении ContactCommunication связь сломалось — надо разбираться.
Update — это не Delete с Insert. Ведь при переименовании какого-нибудь контакта система не ругается на связи с ним.
Тут одно из двух: либо скрипт автора темы затирает первичный ключ Id в этих записях новыми значениями (что маловероятно), либо есть какая-то логика на изменении этой таблицы в виде отдельного БП, встроенного БП объекта или триггера в базе.
Понять можно либо изучением всех упоминаний объекта ContactCommunication во всех схемах, либо, если есть доступ к БД, запустить профайлер и смотреть, что за Delete.