近期弄了一个小项目,也不是非常复杂,须要将一个数据库的一些数据备份到另外一个库。不是本地,可能是网络上其它的数据库。想了一下,用了存储过程和触发器。
也不是非常复杂,首先我须要操作远程数据库,于是写了一个存储过程:
CREATE PROCEDURE sendInfoToRemoteDb
@CardNo varchar(50),
@CardStyle varchar(20),
@userId varchar(20),
@UserName varchar(30),
@passDate datetime,
@inOut int
AS
BEGIN
--exec sp_addlinkedserver
<span style="white-space:pre"> </span>--@server='ims_srv_lnk',
<span style="white-space:pre"> </span>--@srvproduct='',
<span style="white-space:pre"> </span>--@provider='MSDASQL',
<span style="white-space:pre"> </span>--@provstr='Driver={SQL SERVER};SERVER=xxxx.com;UID=xxx;PWD=xxx;Database=xxx'
insert into ims_srv_lnk.IMSDBBAK.dbo.tb_record(cardNo,cardStyle,userId,userName,passDate,inOut)
values(@CardNo,@CardStyle,@userId,@UserName,@passDate,@inOut)
END
GO
事实上就是操作远程的数据库。插入一下数据。然后这边本地数据库写了一个触发器:
create trigger tgr_passrecord_insert
on PassCheckRecord
for insert --插入触发
as
--定义变量
declare
@CardNo varchar(50),
@CardStyle varchar(20),
@userId varchar(20),
@UserName varchar(30),
@passDate datetime,
@inOut int
--在inserted表中查询已经插入记录信息
select @CardNo = CardNo, @CardStyle = CardStyle,@userId=userId ,
@UserName=UserName,@passDate=passDate, @inOut=inOut
from inserted;
set @CardNo = @CardNo;
set @CardStyle = @CardStyle;
set @userId = @userId;
set @UserName = @UserName;
set @passDate = @passDate;
set @inOut = @inOut;
exec [dbo].[sendInfoToRemoteDb]
@CardNo = @CardNo,
@CardStyle = @CardStyle,
@userId = @userId,
@UserName = @UserName,
@passDate = @passDate,
@inOut = @inOut
print '发送信息成功!';
然后这种结果第一次运行成功了,可是第二次却提示 ims_srv_lnk已存在,不能运行了。后面想来想就把代码里面的连接server那一块删除了,结果就OK了。
来源:http://bluesnowsoft.com