数据库表比较多,并且有些是比较重要的表,不能随便更新和删除,因此想到在所有的表中建触发器,更新或者删除行数达到限制的时候就不允许操作。
单个表是没有问题的,由于表太多就用游标写了个循环执行,结果报错了,请大神给看一下?
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' 附近有语法错误。
错误一直循环了好多,执行完数据库自己就断开连接了