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”
去
您在哪里提交交易?在哪里执行删除?在哪里提交事务?删除是在哪里执行的?哦,我最近开始使用触发器,对此我不太熟悉!)哦,我最近开始使用触发器,对此我不太熟悉!;)