触发以防止更新但允许插入

时间:2015-07-03 15:01:33

标签: sql sql-server triggers

SQL Server触发器是否可以阻止更新记录并允许插入新记录?

谢谢, Przemek

3 个答案:

答案 0 :(得分:1)

无法通过创建对目标表具有INSERT访问权限但不具有UPDATE访问权限的SQL Server用户来实现此目的吗?创建一个没有权限的新用户,然后:

GRANT INSERT ON [blah] TO [user]

我承认,我对SQL Server触发器的了解是有限的,但这似乎可行。

答案 1 :(得分:1)

要展开INSTEAD OF UPDATE,此触发器将触发UPDATE个命令。 INSERTDELETE命令照常工作;如果您想拦截其中任何一个使用INSTEAD OF INSERTINSTEAD OF DELETE触发器。

完整的解决方案是这样的:

CREATE TRIGGER myTable_IO_Upd ON myTable INSTEAD OF UPDATE AS
BEGIN
  RAISERROR('myTable does not allow UPDATE queries.', 18, 0);
END;
GO

RAISERROR的更多信息是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

答案 2 :(得分:0)

要防止更新表,您可以使用“INSTEAD OF UPDATE”Trriger 您可以查看此便笺“https://msdn.microsoft.com/en-us/library/aa258254%28SQL.80%29.aspx?f=255&MSPPError=-2147217396