现在局域网下有两台sqlserver, 存放着相同的库和表, 假设A服务器里数据库叫As,有张表叫At,表里有三个字段。
AS服务器下AT表里的字段如下
Id Name Time
1 B301 4
2 C203 5
3 D403 6
4 E504 8
在B服务器里存在与AS服务器同样的库名,同样的表名,同样的字段名。
我想当在A服务器这张表里加入一条数据时,也把数据更新到B服务器里,使得两台服务器两张表里的数据保持同步并完全一样?
请问有高手知道能告诉我么?
----------------------------------------------------------
方案一,
1,先建立联结服务器
2,建立触发器
方案2,sqlserver的复制功能
对于方案一,转给你些资料:
/********************链接数据库 *******************************/
exec OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.存储过程名
select * into 本地库名..表名 from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
insert 本地库名..表名 select * from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
或使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
select * from 别名.库名.dbo.表名
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
go
触发器的例子:
create trigger ***** on *** for insert
insert into 你的备份表 select *,'增加','新',getdate() from inserted
create trigger ***** on *** for update
insert into 你的备份表 select *,'更改','新',getdate() from inserted
insert into 你的备份表 select *,'更改','旧',getdate() from deleted
create trigger ***** on *** for delete
insert into 你的备份表 select *,'删除','旧',getdate() from deleted