在表上设置触发器以限制INSERT,DELETE,UPDATE操作的数量

问题描述 投票:0回答:1

例如:在给定的时间点,用户在特定表上执行INSERTDELETEUPDATE的次数不应超过X次,如果用户执行操作[[X + 1次,则将触发一个触发器。

sql-server triggers ssms dml
1个回答
0
投票
create table dbo.targetTable ( id int, colA varchar(10) ); go create or alter trigger dbo.DMLxTimes on dbo.targetTable for insert, update, delete as begin /* --old days.. IF @@ROWCOUNT > 5 begin rollback; end --*/ declare @maxrows int = 5; --maximum number of rows allowed per dml action if (select count(*) from inserted) > @maxrows or (select count(*) from deleted) > @maxrows begin rollback; end end go insert into dbo.targetTable(id, colA) values (0, 'a'),(0, 'a'),(0, 'a'),(0, 'a'),(0, 'a'); --5 rows inserted go insert into dbo.targetTable(id, colA) values (0, 'a'),(0, 'a'),(0, 'a'),(0, 'a'),(0, 'a'),(0, 'a'); --6 rows inserted ... error go insert into dbo.targetTable(id, colA) values (0, 'a'),(0, 'a'); --2 rows inserted go --all updated, error update dbo.targetTable set colA = colA; go --ok update top(5) dbo.targetTable set colA = colA; go delete top (4) from dbo.targetTable; go --ok update top(15) dbo.targetTable set colA = colA; go
© www.soinside.com 2019 - 2024. All rights reserved.