水为痕 2018-01-15 12:46 采纳率: 50%
浏览 1402
已结题

关于限制行更新的触发器问题

数据库表比较多,并且有些是比较重要的表,不能随便更新和删除,因此想到在所有的表中建触发器,更新或者删除行数达到限制的时候就不允许操作。
单个表是没有问题的,由于表太多就用游标写了个循环执行,结果报错了,请大神给看一下?
SQL如下:
declare @TableName varchar(50)
Declare Cur Cursor For
select name from sysobjects where xtype = 'u'
declare @SQL Varchar(2000)
Open Cur
Fetch Cur Into @TableName --记录Table
While @@FETCH_STATUS=0
BEGIN
SET @SQL = '
CREATE TRIGGER ' +@TableName+'_LIMIT_
ON '+@TableName+' FOR UPDATE,DELETE
AS
if ORIGINAL_LOGIN()in ("sa","729467") and (select count(*) from deleted)> 50
BEGIN
RAISERROR ( "不允许超量的表更新,请联系DBA",16,1)
ROLLBACK TRANSACTION
RETURN
END
GO'
Exec(@sql)
End
Close Cur
Deallocate cur;

报错信息如下:
消息 102,级别 15,状态 1,过程 RM_CHECK_ITEMNEW_LIMIT_,第 7 行
'不允许超量的表更新,请联系DBA' 附近有语法错误。
消息 102,级别 15,状态 1,过程 RM_CHECK_ITEMNEW_LIMIT_,第 11 行
'GO' 附近有语法错误。
错误一直循环了好多,执行完数据库自己就断开连接了

  • 写回答

2条回答 默认 最新

  • devmiao 2018-01-15 15:52
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器