触发器阻止更新,但允许插入
为了防止表更新,你可以使用“INSTEAD OF UPDATE” Trriger 你可以检查此注“https://msdn.microsoft.com/en-us/library/aa258254%28SQL.80%29.aspx?f=255&MSPPError=-2147217396”
谢谢。穆罕默德。问题是:我如何允许插入这种触发器? –
可以允许插入使用普通许可“授权”,用这个触发 –
我需要你的情况下,更明确化控制的更新,所以我可以为你 –
无法通过这个创建具有INSERT在目标表的访问,但不更新访问SQL Server用户来完成?没有权限创建新用户,那么:
GRANT INSERT ON [blah] TO [user]
我承认,我的SQL Server的知识触发器是有限的,但是这似乎像它会工作。
我想显示个别的错误信息,因此可以触发。 –
权限可以控制非特权用户直接访问表,但不会阻止通过存储过程进行更新,假设所有权链不间断。 –
要扩大INSTEAD OF UPDATE
,这个触发条件会为UPDATE
命令。 INSERT
和DELETE
命令照常工作;如果您想拦截那些使用INSTEAD OF INSERT
或INSTEAD OF DELETE
触发器的人。
的完整的解决方案是这样的:在RAISERROR
CREATE TRIGGER myTable_IO_Upd ON myTable INSTEAD OF UPDATE AS
BEGIN
RAISERROR('myTable does not allow UPDATE queries.', 18, 0);
END;
GO
更多信息here。基本上第二个参数(18)是严重性,其中18是允许用户定义的异常的最高严重性。第三个参数(0)是您通常不需要的“状态”,因此为零。
再举一个例子:如果你想防止UPDATE
和DELETE
,你会使用这样的:
CREATE TRIGGER myTable_IO_Upd ON myTable INSTEAD OF UPDATE, DELETE AS
BEGIN
RAISERROR('myTable does not allow UPDATE or DELETE queries.', 18, 0);
END;
GO
这个问题似乎有点复杂,我期望 - 我已创建新线程来覆盖它:http://stackoverflow.com/questions/31219607/trigger-to-block-some-updates-and-allow-inserts –
限制用基于权限是最好的。它可以用触发器来完成,但是会有开销。你能否更详细地解释你的情况,也许有更好的方法来实现你想要的。 – Greg
我有一个Customers表(Id,Name,City,ValidFrom,ValidTo)。要跟踪更改,我想通过添加新记录来允许更改,而不是更新当前。我看到了 –
,所以如果有人想要发布更新,你究竟期待什么发生?你想要抛出一个错误吗?你想用更新替换更新吗? – Greg