SQL Server: удаление строк с ограничениями внешнего ключа: могут ли транзакции переопределять ограничения?

У меня есть несколько таблиц, в которых добавлены ограничения внешнего ключа. Они используются с генерированием кода для настройки конкретных объединений в сгенерированных хранимых процедурах.

Можно ли переопределить эти ограничения, вызвав несколько удалений в транзакции, в частности «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, не так ли? хорошим решением было бы обновить соответствующий код, создав ограничения в начале proc и очистив их, когда ваш код будет выполнен. Не забудьте тогда разобраться с случаем, когда ваше временное ограничение не может быть проверено на данные.

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

  • Где я могу найти хорошее введение в SQL-блокировку и стратегии транзакций
  • Предоставляет ли SQL Server ограничение ограничений в транзакции, если оно еще не выполнено?
  • как рассчитывать количество транзакций в секунду в секунду и рост базы данных
  • Когда выйдет XLOCK в «вложенной транзакции»?
  • SQL-транзакции (b) Блокировка Выбор - это мое понимание правильно
  • УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION работает только с транзакциями?
  • SQL Server: предотвращает блокировку таблицы во время вставок в цикле
  • Тест Dtcping проходит, но все же связь с базовым менеджером транзакций не удалась
  • Sql Notification Поддерживаемые уровни изоляции для транзакций
  • В чем причина «контекста транзакции, используемого другим сеансом»,
  • TransactionScope и SQL Server Compact
  • Interesting Posts

    Математическая функция в Sql Case Statement

    Вставить все даты в период времени в таблице

    Централизованная база данных: несколько потребителей

    Операторы T-SQL IF в предложениях ORDER BY

    Exception DATABASE1.MDF 'не может быть открыт, так как это версия 655. Этот сервер поддерживает версию 612 и ранее. Не поддерживается нисходящий путь

    Запрос на получение метаданных столбцов, ключа и индекса

    В TSQL, как бы вы конвертировали из int в datetime и дали возраст?

    Составной ключ sql server 2008

    SQL Server эквивалент Oracle Wallet Manager

    Подсчет значений на основе отдельных значений из другого столбца

    Как использовать BETWEEN в справочной таблице

    Синтаксис SQL – группа … Пользовательская функция агрегации?

    Почему индекс SQL Server не используется?

    Как вы получаете ведущие групповые полнотекстовые поиски для работы в SQL Server?

    В предложении OUTPUT в триггере INSTEAD OF INSERT можно ли ссылаться на обе таблицы INSERTED?

    Давайте будем гением компьютера.