在SQL中 如何实现不同数据库的两张表的同步

有一台服务器,SQL中有DB_01 和DB_02两个数据库,其中的表 PA,结构完全一样,用什么方法能实现两张表的同步?比如我在DB_01.PA中录入数据,在DB_02.PA中也能看到?

请高手详述! 谢谢
我查过 也知道用触发器,但具体语句不知道怎么写。

已测试了大家提供的语句 同步增加的触发器 按大家的语句输入后都出现一个

错误 311:不能在'inserted'表和'deleted'表中使用text、ntext或image列。

请问该如何解决啊?

你可以分三个来写,分别用来监视insert\delete\update三个(这样写容易完成),我下面写一个,你其它有可以参照下面这个来写
--插入行的情况
CREATE TRIGGER [填入触发器名] ON [dbo].[表名]
FOR INSERT
AS

insert [另外一个数据库名].[dbo].[表名] select * from inserted

你也可以参照料我下面这段,写在一起,但比较麻烦,我就不具体按你要求的写了罗.
CREATE trigger [数据库A.tr_user] on [user]
/* 触发器 在数据库A的user表建立一个名字tr_user的触发器 */
for update,insert,delete
/*监视 修改 插入 删除*/
as
if not exists (select * from deleted)
/* 如果deleted表为空,那么 */
insert 数据库B..[user](username,userpass,landtime) select username,password,lastlogin from inserted
/* 将inserted表(就是对于触发器来说刚刚被插入的集合)插入到B.user */
else if not exists (select * from inserted)--删除
/* 否则 如果 inserted集合为空 */
delete 数据库B..[user] where id in (select userid from deleted)
/* 那么删除B.user下id是deleted集合中出现的id 这里用了in */
else--更新
update [user]
set
[user].username=i.username,
[user].userpass=i.password
from 数据库B..[user] as [user],
inserted as i
where [user].id=i.userid
/* update就很明显了,凡是updated的都来更新,保持一样就可以了 */
alter table 数据库B..[user] ENABLE TRIGGER [数据库B.tr_user]
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-10
首先你要考虑应用的是什么SQL,虽说ORACLE, SQLSERVER等都不同, 但都是大同小异而已,还有就是你所需的处理是输入,更新,还是删除。我这里以SQL SERVER的触发器作为例子

同时输入:

CREATE TRIGGER TRIGGERNAME ON DB_01.PA
AFTER INSERT AS INSERT INTO DB_02.PA(FIELD1,FIELD2, FIELD3...) SELECT * FROM INSERTED

同时删除:
CREATE TRIGGER TRIGGERNAME ON DB_01.PA
AFTER DELETE AS DELETE FROM DB_02.PA WHERE DB_02.PA. FIELD1 = (SELECT FIELD1 FROM DELETED )

同时更新:

CREATE TRIGGER TRIGGERNAME ON DB_01.PA AFTER UPDATE AS
UPDATE DB_02.PA SET DB_02.PA.FIELD2 =
(SELECT FIELD2 FROM DB_01.PA WHERE DB_02.PA.FIELD1 = DB_01.PA.FIELD1)

这里假定要更新的数据为FIELD2,而参照用的
为FIELD1 当然你可以自己任意决定

TRIGGERNAME 为触发器的名字,任意输入本回答被提问者采纳
第2个回答  2008-05-21
直接可以用了,不过这里我假设主键是id

CREATE TRIGGER tr1
ON DB_01.dbo.PA
FOR INSERT
AS
BEGIN
insert into DB_02.dbo.PA select * from Inserted i
END

CREATE TRIGGER tr2
ON DB_01.dbo.PA
FOR delete
AS
BEGIN
delete DB_02.dbo.PA
from DB_02.dbo.PA,deleted
where DB_02.dbo.PA.id=deleted.id
END

CREATE TRIGGER tr3
ON DB_01.dbo.PA
FOR update
AS
BEGIN
delete DB_02.dbo.PA
from DB_02.dbo.PA,deleted
where DB_02.dbo.PA.id=deleted.id
insert into DB_02.dbo.PA select i.* from inserted i
END

CREATE TRIGGER tr4
ON DB_02.dbo.PA
FOR INSERT
AS
BEGIN
insert into DB_01.dbo.PA select * from Inserted i
END

CREATE TRIGGER tr5
ON DB_02.dbo.PA
FOR delete
AS
BEGIN
delete DB_01.dbo.PA
from DB_01.dbo.PA,deleted
where DB_01.dbo.PA.id=deleted.id
END

CREATE TRIGGER tr6
ON DB_02.dbo.PA
FOR update
AS
BEGIN
delete DB_01.dbo.PA
from DB_01.dbo.PA,deleted
where DB_01.dbo.PA.id=deleted.id
insert into DB_01.dbo.PA select i.* from inserted i
END
第3个回答  2008-05-21
建一个触发器,发现A表有任何操作,B表也执行同样的操作

SQL Server中 两个不同的数据库中的两张表如何关联?
1、首先就是创建几个没有任何关系的表,但是注意,你在将要作为外键表的表上必须使用与将要作为主键表的数据类型相同。2、将能唯一标识的那一行设置为主键,其他表类似。3、接下来添加关系,如下图。4、拖动需要添加的关系,直接看图。5、关联完成,如图。

实现MySQL数据同步如何让两个表相互同步mysql两表同步数据
MySQL数据同步可以通过多种方式实现,其中较为常用的方法有以下几种:1. 使用触发器进行同步 MySQL支持使用触发器来自动执行一些操作,例如在一个表中插入数据时,可以在触发器中设定另一个表自动插入相同的数据。使用触发器可以实现数据的自动同步,但对于大型数据库来说,这种方法可能会影响系统性能。2. ...

有两个电脑都安装SQL server,都有一个相同的数据库,如何实现两个...
1、快照复制 2、事务复制 3、合并复制 具体的步骤太多,你可以参考一下。

sql数据库中,怎么使两个表中,有一个数据是一样的,然后修改一个,另一...
1: 同时更新两种表 update A set 字段=XX where 条件 update B set 字段=XX where 条件 2:使用触发器 在A表建立触发器 更新B表信息 create trigger on A for update update B set 字段=XX where 条件(使用inserted ,deleted表)--- 调用直接使用更新语句更新A表即可 update A set 字段=XX...

怎么实现两个数据库的同步
少量数据库同步可以采用触发器实现,同步单表即可。 三、配置过程中可能出现的问题 在sql server 2000里设置和使用数据库复制之前,应先检查相关的几台sql server服务器下面几点是否满足: 1、mssqlserver和sqlserveragent服务是否是以域用户身份启动并运行的(.\\administrator用户也是可以的) 如果登录用的是本地系统帐户lo...

sql语句 同时查询两个表
‍‍一,两张表关键查询 1、在userinfo(用户信息表)中显示每一个用户属于哪一个部门。sql语句为:select userinfo.user_di,userinfo.user_name,dep_name from userinfo,dep where userinfo.user_dep=dep.dep_id 2、在userinfo(用户信息表)中显示每一个用户的性别。sql语句为:select ...

两台服务器两个sql数据库怎么实现数据同步?
用定时任务同步的方法来实现,用实时接口会影响系统的运作。用spring做一个定时任务,每天低谷时候进行跑批处理就可以同步了。

MySQL库间数据同步的实现方法分享mysql不同库数据同步
这将在整个MySQL Cluster中创建一个名为test_cluster的表,数据将被复制到不同的节点上。因此,当一个节点下线时,不会影响整个系统的可用性。3. MySQL代理\/中间件 MySQL代理\/中间件是另一种实现MySQL库间数据同步的方法。它通过在MySQL服务器与应用程序之间添加一个代理层,来提供多个数据库节点的...

SQL数据库里怎么让两个表想关联(数据库两个表如何关联)
有多种方法:1<左联:select列名fromGradeleftjoinClassonGrade.GradeID=Class.GradeID 2<右联:也是一样,只是left改为right 3<平级查询:select列名fromGrade,ClasswhereGrade.GradeID=Class.GradeID 当然,可能还有别的方法,有这些基本就行了 ...

在一条SQL语句中同时对两个数据库中的不同表进行操作,有什么好的解决方...
1.如果是同一服务器:假设 另一个数据库名为'数据库B',并且当然用户对两个数据库都有对应权限 select into [table] from [数据库B].[所有者].[表名]2.如果不在同一服务器 select into [table] from opendatasource('sqloledb','data source=服务器名或IP;user id=登陆名;password=口令')....

相似回答