Запретить удаление одной строки в 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