У меня есть несколько таблиц, где ограничения Внешнего ключа добавляются. Они используются с генерацией кода для установки определенных соединений в сгенерированных хранимых процедурах.
Действительно ли возможно переопределить эти ограничения путем вызова нескольких, удаляет в рамках транзакции, конкретно "TransactionScope" в C# или расположенном каскадом удалении абсолютно требуется?
Не используйте каскадное удаление, это может привести к серьезным проблемам с производительностью. Лучше всего выполнять удаление в порядке от самой младшей дочерней таблицы до родительской.
Отключение внешних ключей - это рецепт от проблем с целостностью данных. Подобное должен делать только опытный DBA, который хорошо знает, к каким проблемам это может привести. Если вы задаете этот вопрос, то вы еще недостаточно опытны, чтобы использовать эту технику. Помните, когда вы отключаете FK, вы отключаете его для всех, а не только для вашего процесса.
Единственный способ "переопределить" ограничение внешнего ключа предназначено для его отключения:
Отключение ограничения FOREIGN KEY позволяет изменять данные в таблице без проверки ограничений. Отключите ограничение FOREIGN KEY во время инструкций INSERT и UPDATE, если новые данные будут нарушать ограничение или если ограничение должно применяться только к данным, уже находящимся в базе данных.
Вам нужно использовать команду ALTER TABLE
, чтобы отключить ограничение, используя ключевое слово NOCHECK
. IE:
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;
Единственная альтернатива - удалить ограничение и при необходимости добавить его заново.
Необходимость сделать это должна привести к дискуссиям о том, как моделировать таблицы, поэтому в этом нет необходимости.
Если ваши ограничения FK специально установлены для конкретного использования в хранимых процедурах, это не на самом деле FK, не так ли? Хорошим решением было бы обновить соответствующий код, создав ограничения в начале процедуры и очистив их, когда ваш код будет готов. Не забудьте тогда иметь дело со случаем, когда ваше временное ограничение не может быть проверено по данным.
Вы не можете отменить ограничения FK, если бы вы могли, какой смысл был бы в их создании?