使用递归触发器来操作指针

尽管递归触发器比较复杂而且难于管理,但是它使用起来非常方便。本文中,我们将简单描述有关递归触发器的内容,并提供了使用它们的时候必须记住的一些有用的技巧。

递归触发器能够在原始列表中或者在其他列表中激发其他的触发器。这两种类型的触发器递归分为直接的或间接的递归。当一个触发器本身起作用时,一个直接的递归就生成。当一个触发器以其他列表作用时,一个间接的递归就生成了。

当使用递归触发器时请记住的内容
触发器递归局限于32位。如果一个触发器以无限循环或超过32位,触发器就会终止数据交换并停留在开始处。
如果一个触发器操作ROLLBACK TRANSACTION,将不会执行其他的触发器。
严格地检测递归触发器。未经检测的递归触发器将对数据操作带来很大的危害。
超过32位的触发器是一个无实际意义的触发器。这样应该考虑被控制的逻辑循环或其他程序终止检查,这对递归触发器的保护很有作用的。
不能控制触发器初始更改的地方。所以你的列表必须以一个特定的方式来更新,你不能使用递归触发器。你只能设置第一个和最后一个触发器。
间接递归在缺省情况下为ON。如果想把它变为OFF,必须使用sp_configure来设置嵌套触发器选择。
直接递归在缺省情况下是OFF。可以通过使用ALTER DATABASE声明把它变为ON。以下范例将直接递归变成dbName数据库。
USE master
GO
ALTER DATABASE dbName
SET RECURSIVE_TRIGGERS ON
GO

时间: 2024-08-31 20:10:31

使用递归触发器来操作指针的相关文章

指针删除操作 指针赋值 错误

问题描述 指针删除操作 指针赋值 错误 #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int *p,*q; p = new int[10]; p[0] = 2; p[1] = 1; cout << "********"<< endl; q = p+1; cout << *q <<endl;

mysql触发器trigger操作memcache实例

对memcache的操作一般都是放程序里面去操作的,新增,更新,删除什么的.如果能利用mysql来对memcache进行操作,那就更好,代码端就会简单一点.但是利用mysql来操作memcache,比较适合实现简单的方式.下面说一下安装的过程和遇到的问题,在看安装过程的之前,我觉得应当先看一下,我安装时候所遇到的问题,这样你可以避免掉,少走一点弯路.一,安装所要的软件mysql5.1以前版本:http://downloads.mysql.com/archives/ libevent下载:wget

sqlserver中触发器+游标操作实现_MsSql

复制代码 代码如下: Create trigger tri_wk_CSVHead_History on wk_CSVHead_History --声明一个tri_wk_CSVHead_History触发器, instead of insert ---插入操作被代替执行下面的操作 as begin declare YB cursor --声明一个游标 for select NoteNO from inserted--这里的NoteNO要和下面的匹配 open YB declare @NoteNO

sqlserver中触发器+游标操作实现

复制代码 代码如下: Create trigger tri_wk_CSVHead_History on wk_CSVHead_History --声明一个tri_wk_CSVHead_History触发器, instead of insert ---插入操作被代替执行下面的操作 as begin declare YB cursor --声明一个游标 for select NoteNO from inserted--这里的NoteNO要和下面的匹配 open YB declare @NoteNO

mssql视图和触发器的操作

///sql查询分析器里面操作 ///删除视图 if exists(select table_name from information_schema.views where table_name='v_user') drop view v_user ///创建视图 create view v_user as select * from Userinfo ///修改视图 alter view v)user as select uname,uage from Userinfo   ///创建触发器

数据操作-指针空间分配问题?debug出错了

问题描述 指针空间分配问题?debug出错了 typedef string ElemType; typedef struct LNode { ElemType data; struct LNode next; }LNode,*LinkList; Status ListInit(LinkList &l) { l = (LinkList)malloc(sizeof(LNode)); l->next = NULL; l->data = ""; return OK; } v

MySQL 触发器的基础操作(六)_Mysql

1.为什么使用触发器:      在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而数据库对象触发器则用来实现由一些表事件触发的某个操作.在数据库系统中,当执行表事件时,则会激活触发器,从而执行器包含的操作.触发器的操作包含创建.查看.删除.      触发器是数据库对象之一,该对象与编程语言 中的函数非常类似,都需要声明.执行等.但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发.激活从而实现执行.例如:在学生表中有学生名字.学生总数字段,每当添加一条学生记录时,

mysql 触发器 对 触发器所在表进行操作的问题

问题描述 如题 报错为图片中所示是不是触发器从设计上就根本不能进行对所在表进行操作呢?有没办法解决的说? 问题补充:manasky 写道 解决方案 "如果触发器无法操作所在表,那么我想通过使用一个过渡表上的触发器也可以勉强"正如你所说,如果hibernate在实现save或者批量插入时确实没法对ccc重新赋值,那我会像你说的那样,用另外一个临时表来协助完成这个操作.是不是主流,我还真不能判断. 但我有个感觉,hibernate应该是可以实现你这种需求的,如果这种需求都实现不了,那我估计

Swift中的指针操作和使用详细介绍_Swift

Apple期望在Swift中指针能够尽量减少登场几率,因此在Swift中指针被映射为了一个泛型类型,并且还比较抽象.这在一定程度上造成了在Swift中指针使用的困难,特别是对那些并不熟悉指针,也没有多少指针操作经验的开发者(包括我自己也是)来说,在Swift中使用指针确实是一个挑战.在这篇文章里,我希望能从最基本的使用开始,总结一下在Swift中使用指针的一些常见方式和场景.这篇文章假定你至少知道指针是什么,如果对指针本身的概念不太清楚的话,可以先看看这篇五分钟C指针教程(或者它的中文版本),应