Я хочу удалить ограничение по запросу, чтобы обновить поле и снова добавить ограничение. Я использую «ограничение nocheck», чтобы отключить, и «проверить ограничение», чтобы удалить и добавить. проверка не работает, но когда я использую проверку после обновления моего поля, она не работает.
Как я могу это исправить?
Вот пример того, что я делаю:
ALTER TABLE t NOCHECK CONSTRAINT [FK_a]
UPDATE t SET b+=10; --b depends on FK_a
ALTER TABLE t CHECK CONSTRAINT [FK_a]
, прежде чем я использую nocheck, я получаю ошибку:
Оператор UPDATE конфликтовал с ограничением FOREIGN KEY
"FK_a".
Я, кроме использования, получаю эту ошибку после использования, проверяю и обновляю запрос снова, но запрос на обновление работает без проблем!
Я использую drop и add и получил тот же результат. Почему?
сценарий моей таблицы:
CREATE TABLE t(
[b] [smallint] NOT NULL,
CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
(
[b] ASC,
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE t WITH NOCHECK ADD CONSTRAINT [FK_a] FOREIGN KEY([b])
REFERENCES [t] ([b])
ON UPDATE CASCADE
ON DELETE CASCADE
ALTER TABLE t CHECK CONSTRAINT [FK_a]