读书人

两表记录同步怎么处理

发布时间: 2012-09-18 16:21:42 作者: rapoo

两表记录同步怎么办
A表
id name
1 n1
2 n2
3 n3

由A表产生B表
id name data
1 n1
2 n2
3 n3
然后为B表的 data 手工录入数据:
id name data
1 n1 d1
2 n2 d2
3 n3 d3



A表改变为
id name
1 n1
3 n3
4 n4

B表变为
id name data
1 n1 d1
3 n3 d3
4 n4

意思为A、B两表 id name 同步 ,但要保留 data字段输入的数据
求 sql 或是处理过程

[解决办法]
分3种情况嘛

A表数据新增,B表也同时新增
insert into A(id,name) values(id,name)
insert into B(id,name) values(id,name)

A表数据更新,B表也同时更新
update B set id=new_id,name=new_name where id=id and name=name
update A set id=new_id,name=new_name where id=id and name=name

A表数据删除,B表数据删除
delete from B where id=id and name=name
delete from A where id=id and name=name

你总有办法判断用户会选择添加,更新和删除操作吧
[解决办法]
3楼已经给你答案了。

我假设a,b两个表,
a:
aid,aname aid为主键
b:
bid,bname,bdata bid为主键

然后……
给A表添加触发器,代码如下:

CREATE TRIGGER tr_test
ON a
FOR INSERT,DELETE
AS
BEGIN
SET NOCOUNT ON
IF EXISTS (SELECT * FROM inserted)
INSERT INTO b SELECT aname, '' FROM inserted
ELSE
DELETE FROM b WHERE EXISTS (SELECT * FROM deleted WHERE bname = aname)
END
GO


测试语句:

use test
go

insert into a values ('n1')
insert into a values ('n2')
insert into a values ('n3')

update b set bdata = 'd1' where bname = 'n1'
update b set bdata = 'd2' where bname = 'n2'
update b set bdata = 'd3' where bname = 'n3'

delete from a where aname = 'n1'
insert into a values ('n4')
[解决办法]
增:Insert Into B(Id,[name]) Values('Id新值','name值')
删:Delete From B Where Id='旧Id值'
改:Update B Set [Name]='name值' Where Id='Id值'

读书人网 >.NET

热点推荐