Запретить удаление одной строки в SQL Server, но разрешить удаление других строк в той же транзакции

Допустим, у меня есть следующая таблица:

PKID | UID | FKID
-----------------
1    | ABC | 1
2    | BCD | 2
3    | CDE | 2
4    | DEF | 1
5    | EFG | 3

Что я хочу сделать, так это удалить блоки с помощью триггера (или другого способа, если есть лучший способ сделать это), но только для строк, где FKID = 1, но все же разрешить удаление других строк. Так что, если кто-то печатает DELETE FROM sampleTable Я хотел бы, чтобы только строки 2, 3 и 5 были удалены, а 1 и 4 должны остаться.

1 ответ

Попробуй это.

CREATE TRIGGER dbo.trg_tablename_delete ON dbo.tablename
    FOR DELETE
    AS
        SET NOCOUNT ON

        IF EXISTS (SELECT * FROM deleted WHERE FKID = 1)
        BEGIN
            RAISERROR ('Cannot delete this record!', 0, 1) WITH NOWAIT
            ROLLBACK
        END

        SET NOCOUNT OFF
    GO
Другие вопросы по тегам