简版: 有谁知道一种方法 - 在SQL 2000触发器中 - 检测哪个进程修改了数据并退出了触发器如果检测到特定进程?如何确定导致触发器触发的进程的名称
长版本 我有一个自定义的同步例程,在不相似的数据库模式之间来回移动数据。
当此进程从数据库A获取修改的记录时,需要将其转换为进入数据库B的记录。数据库完全不同,但共享一些相同的数据,例如用户帐户和用户活动(但是即使这些表结构上不同)。
当数据在其中一个相关表中被修改时,会触发一个触发器,将该记录的PK写入“同步”表。这个“同步”表由一个进程(一个存储过程)进行监视,该进程将按顺序获取PK,并将相关数据从数据库A复制到数据库B,并根据需要进行转换。
这两个数据库都有触发器,可将PK复制到同步表中,但这些触发器必须忽略同步过程本身,以免进入“无限循环”(或更少,取决于嵌套限制)。
在SQL 2005和起来,我用下面的代码在同步过程中证明自己的身份:
SET CONTEXT_INFO 0xHexValueOfProcName
每个触发器必须在开始下面的代码,看看是否能修改数据的过程同步过程本身:
IF (CONTEXT_INFO() = 0xHexValueOfProcName) BEGIN -- print '## Process Sync Queue detected. This trigger is exiting! ##' return END
该系统的伟大工程,保持车轮继续滚滚向前,保持数据同步。但现在的问题是SQL2000服务器想要加入该派对。
有没有人知道一种方法 - 在SQL 2000触发器中 - 检测哪个进程修改了数据,并在检测到特定进程时退出触发器?
谢谢你们!
你不能使用来自因为权限的sysprocesses其中SPID = @@ spid''选择CONTEXT_INFO? – 2011-04-26 16:28:02
我正试图验证,现在。如果它有效,这将是伟大的! – datagod 2011-04-26 16:32:05
请发表反馈,如果它(最好是你自己的答案)。 – 2011-04-26 20:56:28