【发布时间】:2018-10-02 15:40:06
【问题描述】:
我有一些正在使用的视图,如果数据表被另一个表中的变量锁定,我需要设置一个触发器来防止删除视图中的任何数据。我已经设置了触发器,并且使用“INSTEAD OF DELETE”触发器设置删除命令的替换没有问题,但我现在的问题是如何在删除时保留传入的删除查询 是允许的。在本例中,我使用的是 SQL Server。
例如,如果控制表说我的视图被锁定,那么任何发送到数据库的删除查询都应该停止,并且应该返回错误消息(这里没有问题,已经有了)。但是,如果控制表显示我的视图已解锁,我需要能够允许删除查询从视图中删除数据(这里我需要帮助)。
代码:
CREATE TRIGGER [database_name].[trigger_name]
ON [database_name].[view_name]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON
IF NOT EXISTS (SELECT * FROM [database_name].[control_table_name]
WHERE Control_Item = 'view_name' AND Can_modify = 'N')
BEGIN
SET NOCOUNT OFF
--NEW DELETION STATEMENT GOES HERE, NEEDS TO BE DUPLICATE OF REPLACED DELETE QUERY--
END
ELSE
BEGIN
RAISEERROR('Deletions are currently disabled!', 11, 1);
END
END
我确定有一些愚蠢的逻辑陈述或我遗漏的东西,但我会感谢我能得到的所有帮助。谢谢!
【问题讨论】:
-
触发器是高度特定于供应商的 - 所以请添加一个标签来指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或完全不同的东西。 -
我正在使用 sql-server,将更新主帖。感谢您的信息。
-
您不能从视图中删除数据 - 您需要直接从基础表中删除它
-
对,但是我可以通过视图删除数据,对吧?我刚试了一下,看来可以了……我应该更新主帖来澄清一下吗?
标签: sql sql-server triggers sql-delete