ВНЕШНИЕ ОСНОВНЫЕ ОГРАНИЧЕНИЯ ничего не обновляйте. Они проверяют значения, записываемые в запись, и приводят к сбою записи, если они приводят к сбою ограничения.
Кроме того, как указывает @marc_s в своем комментарии, триггеры в MS SQL Server устанавливаются на основе. Таблицы INSERTED
и DELETED
могут содержать сразу несколько записей. Ваш код работает только для одной записи.
Вы могли бы попробовать что-то вдоль этих линий ...
UPDATE
table
SET
VERSION_ID = inserted.VERSION_ID
FROM
table
INNER JOIN
deleted
ON table.VERSION_ID = deleted.VERSION_ID
AND table.APP_ID = deleted.APP_ID
INNER JOIN
inserted
ON deleted.PRIMARY_KEY = inserted.PRIMARY_KEY
EDIT
Я только что прочитал ваш комментарий, и я думаю, я понимаю. Вы хотите ограничение внешнего ключа с помощью ON UPDATE CASCADE
.
Этот формат используется для создания этого с помощью DDL.
ALTER TABLE DBO.<child table>
ADD CONSTRAINT <foreign key name> FOREIGN KEY <child column>
REFERENCES DBO.<parent table>(<parent column>)
{ON [DELETE|UPDATE] CASCADE}
Или вы можете просто создать SQL Server Management Studio, чтобы настроить его. Просто убедитесь, что присутствует ON UPDATE CASCADE.
Я хочу избавиться от этого триггера и заменить его на ограничение FK. Когда PK ID изменяет каскад, который изменяется на другой таблице идентификаторов FK. – Elisabeth