предотвращение удаления определенной записи
-
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
Как я могу убедиться, что строки, не соответствующие вышеуказанному условию, не удаляются, как и ожидалось?
Решение
У вас есть вместо триггера, поэтому вам нужен фактический удаление в нем.
Я также рассмотрел просто фильтрацию защищенного ряд, потому что:
- Вам нужна бросание ошибок? Или молча игнорировать?
- Как насчет мультирянных удалений, которые содержат защищенный строк: прервать целое или удалить остальные?
Что-то типа:
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