SQL server触发器、存储过程操作远程数据库插入数据,解决服务器已存在的有关问题

SQL server触发器、存储过程操作远程数据库插入数据,解决服务器已存在的问题

最近弄了一个小项目,也不是很复杂,需要将一个数据库的一些数据备份到另外一个库,不是本地,可能是网络上其他的数据库,想了一下,用了存储过程和触发器。也不是很复杂,首先我需要操作远程数据库,于是写了一个存储过程:

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已存在,不能执行了。后面想来想就把代码里面的连接服务器那一块删除了,结果就OK了。

版权声明:本文为博主原创文章,未经博主允许不得转载。