sql server2008,同一数据库里的两张不同的表怎么实现同步?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server2008,同一数据库里的两张不同的表怎么实现同步?相关的知识,希望对你有一定的参考价值。

例如我数据库里有表aaa和表bbb
aaa里有3个字段 aid a1 a2
bbb里有5个字段 bid b1 b2 b3 b4
aid和bid分别是表aaa和表bbb的主键,不需同步。而是吧aaa中的a1字段的数据同步到b1,把a2字段中的数据同步到b1。

也就是说aaa表里有数据变动时(包括更新列、插入列),bbb表里也能有相应的更新列和插入列。

请高手指教,先谢了!!
1楼谢了,我也知道要用触发器,但是怎么用呢?可以提示一下吗?有代码就更好了

2楼大哥不好意思,应该是“把aaa中的a1字段的数据同步到b1,把a2字段中的数据同步到b2”,bbb里面的其它字段都为空即可

参考技术A 更新
create trigger up_table on aaa
for update
as
if update(a1)or update(a2)
begin
update t2
set b1=t1.a1,b2=t1.a2
from inserted t1,
bbb t2
where t1.aid=t2.bid
end
插入
create trigger in_table on aaa
for insert
as
insert into bbb(b1,b2)
select a1,a2 from inserted
end追问

插入记录触发器我是这样写的:
create trigger in_table on aaa
for insert
as
begin
insert into bbb(b1,b2)
select a1,a2 from inserted aaa
end
go

提示错误:
消息 311,级别 16,状态 1,过程 in_table,第 7 行
不能在 'inserted' 表和 'deleted' 表中使用 text、ntext 或 image 列。

追答

a1,a2你的两个字段类型为text、ntext 或 image 改成字符串试下。

本回答被提问者和网友采纳
参考技术B “吧aaa中的a1字段的数据同步到b1,把a2字段中的数据同步到b1”?a1和a2都要与b1同步吗?你只关联了两表中的三个字段,当然只能更新关联的字段值。要实现两表同步(更新列、插入列)必须要关联需要更新表的主键。追问

问题里面笔误,应该是“把aaa中的a1字段的数据同步到b1,把a2字段中的数据同步到b2”,只是单纯的两个字段对应同步,也就是说外部(网页程序)只是对aaa表进行操做,bbb进行相应的更新,不需要同步的字段留空

参考技术C 这个很简单吗 你对A表写个更新触发器就可以了 当A变有数据更新就可以直接更新B表了 这个很简单的 语法很简单 查下就有了 参考技术D 触发器吧追问

我知道要用触发器,但是可以写几行代码参考一下吗

追答

不好意思 触发器我也不是太懂 帮不了你

sqlserver 把两个sql查询语句查询出来的两张表合并成一张表

第一个sql语句

select companyname gsmc,zb zhibiao
from t_gsndzb left join t_companycode
on t_gsndzb.gsbh=t_companycode.companyid

查询结果:

第二个sql语句

SELECT min(companyname) gsmc,cast(round(sum(t_xstj.hsje)/10000,2)   as   numeric(20,2))  ndje FROM t_xstj left join t_companycode 
on t_companycode.companyid = t_xstj.gsbh
where datediff(year,sj,getdate())=0 group by gsbh

查询结果:

 

合并成一张表的语句:

select isnull(a.gsmc,b.gsmc) gsmc,isnull(a.zhibiao,0) zhibiao,isnull(b.ndje,0) ndje
from (
      --第二个表查询结果--
      select companyname gsmc,zb zhibiao 
      from t_gsndzb left join t_companycode 
      on t_gsndzb.gsbh=t_companycode.companyid
      ) 
A FULL JOIN (
          --第二个表查询结果--
             SELECT min(companyname) gsmc,
             cast(round(sum(t_xstj.hsje)/10000,2)   as   numeric(20,2))  ndje 
             FROM t_xstj left join t_companycode 
             on t_companycode.companyid = t_xstj.gsbh
             where datediff(year,sj,getdate())=0 group by gsbh
) b 
on a.gsmc=b.gsmc

结果:

 

以上是关于sql server2008,同一数据库里的两张不同的表怎么实现同步?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2数据库镜像部署

SQL Server 2008 R2数据库镜像部署

加入并更新同一列sql server [重复]

sql server2008数据库迁移的两种方案

SQL Server 2008 数据库同步的两种方式 (发布订阅)

ms sql server 2008 tempdb里的temporary tables怎么删数据