sql触发器 递归 问题

例:A表触发器中deletefromAwhereid=@id(这个是静态表名)可以执行由于我的表是动态表所以改成Exec('deletefrom['+@A+']where... 例: A表 触发器 中 delete from A where id =@id (这个是静态表名) 可以执行
由于我的表是动态表所以 改成 Exec('delete from ['+@A+'] where id=‘’+@ID+''') 就提示
Instead of 触发器不支持直接递归。 触发器 执行失败
而且经过我测试 改成exec 后删除表自身不能用动态的静态可以,触发其他表可以用改写成exec 形式
我用的是后置触发器 ,
我只说主要部分
我的问题是 是不是 改写exec 语句 就不能执行 执行自身删除 的触发器 还是???

这个 A 是动态表 也就是 @strTable 所以 我用 exec() 或者 set @Sql=‘’ 来 写
展开
 我来答
49o92ac
2011-02-20
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
触发器有两种不同的递归方式,直接递归和间接递归。

1.直接递归

当触发器被激活并执行一个操作时,该操作又使用同一个触发器再次执行操作,被称为直接递归。

例利用触发器的直接递归,当在表中删除一条记录时,通过触发器删除表中所有编号相同的记录。

2.间接递归

更改表1中的数据时,触发器被激活并执行一个操作,而该操作又使另一个表2中的某个触发器被激活。表2中的这个触发器使表1得到更新,从而再次激活表1中的触发器,被称为间接递归。

例如,一应用程序更新了表TA,并引发触发器Trigger_A。Trigger_A更新表TB,从而使触发器Trigger_B被引发。Trigger_B转而更新表TA,从而使Trigger_A再次被引发间接递归。

可以利用系统存储过程sp_dboption关闭直接递归,但这又会开启间接递归。若要把这两种类型的递归都禁止,需要使用系统存储过程sp_configure。
参考资料:明日系列编程词典--SQL Server 编程词典体验版

参考资料: 百度一下

你好师姐
2011-02-22 · TA获得超过123个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:141万
展开全部
建议将 结果生成到字条变量中
set @sql = 'delete from ['+@A+'] where id=‘’+@ID+'''
然后再执行 exec (@sql)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式