在Update触发器TRIGGER中,怎样判断是谁触发器的?

foolishchao 2002-12-18 10:42:17
在触发器TRIGGER中,怎样判断是谁(程序、触发器、外键级联更新)触发的?
...全文
65 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolishchao 2003-01-06
  • 打赏
  • 举报
回复
看来可能没有人能提供答案了,只好结帐了。在此多谢各位网友了。
ahead_lin 2003-01-05
  • 打赏
  • 举报
回复
占个位置..好好学习...
foolishchao 2003-01-04
  • 打赏
  • 举报
回复
请版主帮忙。
txchen 2003-01-04
  • 打赏
  • 举报
回复
gz
xlhl 2002-12-27
  • 打赏
  • 举报
回复
学习
foolishchao 2002-12-27
  • 打赏
  • 举报
回复
怎样查?
OpenVMS 2002-12-27
  • 打赏
  • 举报
回复
应该可以查询父操作的OBJECT
foolishchao 2002-12-26
  • 打赏
  • 举报
回复
上面的回答都不可行。
tongki 2002-12-26
  • 打赏
  • 举报
回复
UP
harmfulbug 2002-12-23
  • 打赏
  • 举报
回复
經常問問題,歐也回答一次,我覺得可以考慮下面的思路:
1:Trigger是可以Nested,比方說A表的Trigger激發了B表的trigger,TRIGGER_NESTLEVEL(object_id(a))來判斷A表是否執行了Trigger,反之,那麼C表的這個Trigger不是A表的Trigger引發,可能是A表它幾連更新引發

2:利用sp_settriggerorder來指定同一個表的多個Trigger的執行順序,比方說A表可以Trigger1更新B表,B表幾連更新C表,A表同時Trigger2更新c表,那麼我指定Trigger2先于Trigger1執行,然後用TRIGGER_NESTLEVEL來判斷,如果第一次那麼肯定TRIGGER_NESTLEVEL返回1,那麼我知道是A表Trigger引發而不是B表幾連更新引發

3:直接查詢A表和B表中的值,如果A和B引發的語句以及A,b表中紀錄不是一樣的話,當然這個方法有點傻了
Chiff 2002-12-22
  • 打赏
  • 举报
回复
请看一下这个帖子是否对你有用。原理是得到该进程最后一次执行的sql语句
http://expert.csdn.net/Expert/topic/1256/1256806.xml?temp=.4463922
Rbuyangel 2002-12-22
  • 打赏
  • 举报
回复
真的学了好多东西,感谢!
foolishchao 2002-12-21
  • 打赏
  • 举报
回复
我的问题是:
a表是主键表,b是外键表,a表级联更新b表。
c表和a表结构类似,a表用触发器更新c表。
d表和b表结构类似,b表用触发器更新d表。

更新a表时数据更改的顺序
1、a表级联更新b表
2、b表触发器更新d表
3、a表触发器更新c表

现想在c表和d表之间建立外键关系,但问题是第2步违反c表和d表之间的外键约束。

CREATE TABLE [dbo].[a] (
[id] [int] NOT NULL,
CONSTRAINT [PK_a] PRIMARY KEY NONCLUSTERED(id)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[b] (
[id] [int] NOT NULL ,
[name1] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [FK_b_a] FOREIGN KEY ([id]) REFERENCES [dbo].[a] ([id]) ON UPDATE CASCADE
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[c] (
[id] [int] NOT NULL,
CONSTRAINT [PK_c] PRIMARY KEY NONCLUSTERED(id)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[d] (
[id] [int] NOT NULL ,
[name2] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
) ON [PRIMARY]
GO
CloneCenter 2002-12-21
  • 打赏
  • 举报
回复
好多星星啊!眼睛都花了,只好 UP 了。
wgy2008 2002-12-21
  • 打赏
  • 举报
回复
关注
CoolAbu 2002-12-21
  • 打赏
  • 举报
回复
Nod...

Studying...
foolishchao 2002-12-20
  • 打赏
  • 举报
回复
我现在就是这样做,用触发器实现外键的功能。
CCEO 2002-12-20
  • 打赏
  • 举报
回复
人家说foolishchao(亚超) 是高手,我能想到的高手一定也想到过了,不过还是要提一个想法:
我理解你的表的关系是这样的:a表与b表、c表都有级联关系,这样当a表修改时同时级联修改了b表、c表,就完事了,不用再作处理;但是b表可能单独修改,这时需要同时修改c表,所以需要触发器来做这个修改。能不能在b表和c表之间定义级联,而不需要触发器呢?
CCEO 2002-12-20
  • 打赏
  • 举报
回复
不是办法的办法:
级联和触发器不要一起使用,也就是说,对一些相关的多个表的集合,如果你需要用触发器查明修改发出的应用,就不要使用级联,而是全部用触发器。
foolishchao 2002-12-19
  • 打赏
  • 举报
回复
不好意思,对这个判断没有用。
加载更多回复(14)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧