在语句 表 的前面加上 数据库名.dbo
例如 insert into table_XFBD2 改成 INsert Into 新库.dbo.table_XFBD2
前提执行这个触发器的用户必须在另外一个库上也有权限
不同服务器的话可以用链接服务器来实现,参考
http://yunlongzheng.blog.51cto.com/788996/468478
若想利用此方法达到反向同步则可能出现问题,比如想在parkfee数据库有新数据插入时让当前数据库也同时插入一条记录,建立一个触发器,则形成了一个循环触发,当插入数据时会报大于最大递归次数错。因此因避免这样的触发循环,若要达到类似效果还须想别的方法。(待续)补充:
若两个库处于不同的数据库服务器则应先进行以下 *** 作:
在 server1 上创建连接服务器,以便在 server1 中 *** 作 server2,实现同步
exec sp_addlinkedserver 'server2','','SQLOLEDB','server2的数据库实例名或ip'
exec sp_addlinkedsrvlogin 'server2','false',null,'用户名','密码'
go
首先,建立要用于测试的 数据库 与 表。create database a
create database b
use a
create table table1(id int, val int)
use b
create table table2(id int, val int)
然后建触发器
use a
DELIMITER //
CREATE TRIGGER tr_Insert_t1
AFTER INSERT ON table1
FOR EACH ROW
BEGIN
-- 检查当前 环境,避免递归.
IF @disable_trigger IS NULL THEN
-- 设置禁用触发器标志.
SET @disable_trigger = 1
-- 插入目标表
INSERT INTO
b.table2
VALUES
(new.id, new.val)
-- 恢复禁用触发器标志.
SET @disable_trigger = NULL
END IF
END
//
DELIMITER
use b
DELIMITER //
CREATE TRIGGER tr_Insert_t2
AFTER INSERT ON table2
FOR EACH ROW
BEGIN
-- 检查当前 环境,避免递归.
IF @disable_trigger IS NULL THEN
-- 设置禁用触发器标志.
SET @disable_trigger = 1
-- 插入目标表
INSERT INTO
a.table1
VALUES
(new.id, new.val)
-- 恢复禁用触发器标志.
SET @disable_trigger = NULL
END IF
END
//
DELIMITER
测试执行效果:
mysql>use b
Database changed
mysql>insert into table2 values(2,2)
Query OK, 1 row affected (0.01 sec)
mysql>use a
Database changed
mysql>insert into table1 values (1, 1)
Query OK, 1 row affected (0.00 sec)
mysql>select * from table1
+------+------+
| id | val |
+------+------+
|2 |2 |
|1 |1 |
+------+------+
2 rows in set (0.00 sec)
mysql>select * from b.table2
+------+------+
| id | val |
+------+------+
|2 |2 |
|1 |1 |
+------+------+
2 rows in set (0.00 sec)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)