特定のレコードが削除されないようにする
-
26-09-2019 - |
質問
特定のレコードを削除しないようにしたい。このトリガーは、その特定のレコードに対して正常に機能します。ただし、他のレコードは削除されても残ります。なぜ?
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
上記の条件に一致しない行が期待どおりに削除されるようにするにはどうすればよいですか?
解決
INSTEAD OF トリガーがあるため、その中に実際の DELETE が必要です。
次の理由から、単純に保護された行をフィルタリングして除外することも検討します。
- エラーをスローする必要がありますか?それとも黙って無視しますか?
- 保護された行を含む複数行の削除はどうなるでしょうか。全体を中止しますか、それとも残りを削除しますか?
何かのようなもの:
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
他のヒント
これはあなたの代わりなので、まだデフォルトの場合の削除操作を実行する必要があります。
所属していません StackOverflow