首页 > 解决方案 > SQL 授予一次只更新一行的权限

问题描述

是否可以将 SQL Server 权限设置为特定用户以允许一次只更新一行?如果答案是yes,那么如何实现呢?

例如,如果你有这样的事情:

use MyDB
go 

update t1 set t1.something = 'xxx' 
--select *
from table t1 

如果此选择将返回多于 1 条要更新的记录,则不允许这样做(...或仅更新第一个),否则如果只有一条记录将被更新,则允许它。

标签: sql-servertsql

解决方案


如果您需要临时解决方案,触发器是一种简单的方法。
不过,这将阻止任何人一次更新多个记录。
如果您需要永久解决方案,我会选择@Larnu 的答案

create trigger U_YourTableName on dbo.YourTableName
for update
as
begin
     set nocount on

     if (select count(1) from inserted) > 1
     begin
           ;THROW 99001, 'your only allowed one update at a time', 1
     end
end

推荐阅读