对SQLServer熟悉的朋友请进来看看,问一个触发器的问题。(200分)

  • 主题发起人 主题发起人 forgot2002
  • 开始时间 开始时间
F

forgot2002

Unregistered / Unconfirmed
GUEST, unregistred user!
设计两个表(都只有一个字段):
Test1表:name1 varchar(20) null;
Test2表:name2 varchar(20) null;
Test1触发器:
CREATE TRIGGER test2_Insert ON [test1]
FOR Insert
AS
insert into test2 Select name1 from Inserted
Test2触发器:
CREATE TRIGGER test1_Insert ON [test2]
FOR Insert
AS
Insert into test1 Select name2 from Inserted
这样两个触发器就是嵌套起来的,由于这样就造成了死循环,超过32层嵌套SQLServer是不
允许操作的,所以两个表都无法进行insert操作。我的要求是两个表都能insert,而且触发了
另外一个表的Insert时,不会再次触发其insert触发器。
目前我的解决办法是直接修改服务器的默认设置:
EXEC sp_configure 'nested triggers', 0
GO
RECONFIGURE
GO
但我其实不想这样,因为我害怕修改默认的设置会有隐患,难道不能在触发器中判断触发条件吗?
理论上应该可以,但我试来试去都试不出来,请兄弟们帮帮我好吗?
 
这个问题不应该是这个原因,如果我猜的没错的话,如果你执行
Insert into test1('aa');的话,结果是只能在test1中插入一条记录,然后提示错误
 
呵呵,帮不上你!我想这种嵌套使用触发器在设计上应该要避免的,而且修改SQLServer默认设置
的后果也难说,听课...
 
这个问题我已经自己解决,请斑竹删去这个问题吧。
 
请参与讨论
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1224849
的朋友到这个问题中随便说点什么,我在这个帖子给大家分吧,谢谢!
 
分,我可以不要,但是,一定要告诉我,你为什么有两个星
 
完颜康指的是CSDN吗?因为我在CSDN的专家分超过一万分,所以是两颗星。
 
你可以用FindClass函数,这个函数的声明是这样的:
function FindClass(const ClassName: string): TPersistentClass;
它返回的是一个类的引用(class of).刚好可以作为你的函数的参数
Procedure Test1(AClass:TClass);
不过TPersistentClass的定义是class of TPersistent,所以只能用于从
TPersistent类继承的类(包括TPersistent)。
 
在东莞什么公司啊?
 
多人接受答案了。
 
后退
顶部