AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 2376
Accepted
datagod
datagod
Asked: 2011-04-27 07:03:38 +0800 CST2011-04-27 07:03:38 +0800 CST 2011-04-27 07:03:38 +0800 CST

如何确定导致触发器触发的进程的名称

  • 772

简短版本: 有谁知道一种方法——在 SQL 2000 触发器中——检测哪个进程修改了数据,并在检测到特定进程时退出触发器?

长版本 我有一个自定义的同步例程,可以在不同的数据库模式之间来回移动数据。

当此过程从数据库 A 获取修改后的记录时,它需要将其转换为进入数据库 B 的记录。数据库完全不同,但共享一些相同的数据,例如用户帐户和用户活动(但即使是这些表结构不同)。

当其中一个相关表中的数据被修改时,将触发一个触发器,该触发器将该记录的 PK 写入“同步”表。这个“同步”表由一个进程(存储过程)监控,该进程将按顺序获取 PK,并将相关数据从数据库 A 复制到数据库 B,并根据需要进行转换。

两个数据库都有触发并将 PK 复制到同步表的触发器,但是这些触发器必须忽略同步过程本身,以免进入“无限”循环(或更少,取决于嵌套限制)。

在 SQL 2005 及更高版本中,我在 Sync 过程中使用以下代码来标识自身:

SET CONTEXT_INFO 0xHexValueOfProcName

每个trigger开头都有如下代码,查看修改数据的进程是不是sync进程本身:

IF (CONTEXT_INFO() = 0xHexValueOfProcName)
开始
-- print '## 检测到进程同步队列。此触发器正在退出!##'
  返回
结尾

这个系统工作得很好,继续前进,保持数据同步。然而,现在的问题是 SQL2000 服务器想要加入聚会。

有谁知道一种方法——在 SQL 2000 触发器中——检测哪个进程修改了数据,并在检测到特定进程时退出触发器?

多谢你们!

sql-server-2000
  • 1 1 个回答
  • 409 Views

1 个回答

  • Voted
  1. Best Answer
    gbn
    2011-04-27T08:23:15+08:002011-04-27T08:23:15+08:00

    SQL Server 2000 也存在SET CONTEXT_INFO 。

    但是,您必须查询sysprocesses.context_info才能读回。CONTEXT_INFO()是 SQL Server 2005 的新增功能。

    • 4

相关问题

  • 将 SQL Server 2000 移动到 SQL Server 2005 时出错 NOLOCK 错误

  • SQL Server 2000:列出并禁用所有触发器

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve