SQL Server触发器是否可以阻止更新记录并允许插入新记录?
谢谢, Przemek
答案 0 :(得分:1)
无法通过创建对目标表具有INSERT访问权限但不具有UPDATE访问权限的SQL Server用户来实现此目的吗?创建一个没有权限的新用户,然后:
GRANT INSERT ON [blah] TO [user]
我承认,我对SQL Server触发器的了解是有限的,但这似乎可行。
答案 1 :(得分:1)
要展开INSTEAD OF UPDATE
,此触发器将触发UPDATE
个命令。 INSERT
和DELETE
命令照常工作;如果您想拦截其中任何一个使用INSTEAD OF INSERT
或INSTEAD 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”