SQL-запрос - создание INSTEAD OF DELETE, который проверяет наличие значения во 2-й таблице - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь создать триггер удаления, который будет печатать сообщение. Триггер должен проверить, существует ли значение order в таблице order_details. Если значение существует во 2-й таблице, я хочу вернуть значение. Я возился несколько дней, но не могу заставить его работать.

Я новичок в SQL Server и создании запросов.
Вот что я собрал:

CREATE TRIGGER tr_delete_check
ON  orders
INSTEAD OF DELETE
AS
IF (SELECT order_id
    FROM   orders
    WHERE  order_details.order_id=orders.order_id
    )
    BEGIN
        PRINT 'No Delete: Value exists in Order Details table'
        ROLLBACK TRANSACTION
    END
GO

1 Ответ

4 голосов
/ 10 декабря 2011

Возможно, вы захотите использовать внешний ключ:

ALTER TABLE order_details
ADD CONSTRAINT order_details_order_id_fkey FOREIGN KEY (order_id)
REFERENCES order (order_id);

Вы могли бы каскадно удалять в зависимости строки в order_details, добавив:

ON DELETE CASCADE

Но по умолчанию:

ON DELETE NO ACTION

, который делает то, что пытается сделать ваш триггер: откатите удаление, если существуют зависимые строки в order_details. Подробнее о см. В руководстве .

...