Sql server 防止删除特定记录

Sql server 防止删除特定记录,sql-server,triggers,sql-server-2008-r2,Sql Server,Triggers,Sql Server 2008 R2,我想防止删除特定记录。此触发器对于该特定记录工作正常。但是,其他记录在被删除时仍然保留。为什么? ALTER TRIGGER [Globalization].[CountriesTracker] ON [Globalization].[Countries] INSTEAD OF DELETE AS BEGIN SET NOCOUNT ON; IF ((Select COUNT(*) from [Deleted] Where [Deleted].[CountryId] =

我想防止删除特定记录。此触发器对于该特定记录工作正常。但是,其他记录在被删除时仍然保留。为什么?

 ALTER TRIGGER [Globalization].[CountriesTracker] 
 ON [Globalization].[Countries] 
 INSTEAD OF DELETE
 AS 
 BEGIN
SET NOCOUNT ON;
IF ((Select COUNT(*) from [Deleted]
     Where [Deleted].[CountryId] = '36bd1536-fb56-4ec4-957e-1b3afde16c56') = 1)
BEGIN       
    RAISERROR('You can not delete this specific record!', 0, 0)
    ROLLBACK TRANSACTION
    RETURN
END
END

如何确保不符合上述条件的行按预期被删除?

因为这是代替,所以您仍然需要对默认情况执行删除操作。

因为这是代替,所以您仍然需要对默认情况执行删除操作。

您有一个代替触发器,所以您需要一个实际删除它

我也会考虑简单地过滤受保护的行,因为:

  • 你需要一个错误抛出吗?还是默默地忽略
  • 对于包含受保护行的多行删除:中止整个行,还是删除其余行
比如:

ALTER TRIGGER [Globalization].[CountriesTracker]  ON [Globalization].[Countries] 
 INSTEAD OF DELETE
 AS 
SET NOCOUNT ON;

DELETE
   CT
FROM
   [Globalization].[Countries] C
   JOIN
   DELETED D ON C.CountryId = D.CountryId
WHERE
    [Deleted].[CountryId] <> '36bd1536-fb56-4ec4-957e-1b3afde16c56'
 GO
ALTER TRIGGER[Globalization].[CountriesTracker]ON[Globalization].[Countries]
而不是删除
像
不计数;
删去
计算机断层扫描
从…起
[全球化][国家]C
参加
已删除C.CountryId=D.CountryId上的D
哪里
[已删除][CountryId]“36bd1536-fb56-4ec4-957e-1b3afde16c56”
去

您有一个INSTEAD OF触发器,因此需要在其中实际删除

我也会考虑简单地过滤受保护的行,因为:

  • 你需要一个错误抛出吗?还是默默地忽略
  • 对于包含受保护行的多行删除:中止整个行,还是删除其余行
比如:

ALTER TRIGGER [Globalization].[CountriesTracker]  ON [Globalization].[Countries] 
 INSTEAD OF DELETE
 AS 
SET NOCOUNT ON;

DELETE
   CT
FROM
   [Globalization].[Countries] C
   JOIN
   DELETED D ON C.CountryId = D.CountryId
WHERE
    [Deleted].[CountryId] <> '36bd1536-fb56-4ec4-957e-1b3afde16c56'
 GO
ALTER TRIGGER[Globalization].[CountriesTracker]ON[Globalization].[Countries]
而不是删除
像
不计数;
删去
计算机断层扫描
从…起
[全球化][国家]C
参加
已删除C.CountryId=D.CountryId上的D
哪里
[已删除][CountryId]“36bd1536-fb56-4ec4-957e-1b3afde16c56”
去

您在哪里提交交易?在哪里执行删除?在哪里提交事务?删除是在哪里执行的?哦,我最近开始使用触发器,对此我不太熟悉!)哦,我最近开始使用触发器,对此我不太熟悉!;)