1. 程式人生 > >SQL server觸發器、存儲過程操作遠程數據庫插入數據,解決服務器已存在的問題

SQL server觸發器、存儲過程操作遠程數據庫插入數據,解決服務器已存在的問題

定義 ims val rom 記錄 插入記錄 其它 pre 項目

近期弄了一個小項目,也不是非常復雜,須要將一個數據庫的一些數據備份到另外一個庫。不是本地,可能是網絡上其它的數據庫。想了一下,用了存儲過程和觸發器。

也不是非常復雜,首先我須要操作遠程數據庫,於是寫了一個存儲過程:

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>[email protected]
/* */=‘ims_srv_lnk‘, <span style="white-space:pre"> </span>[email protected]=‘‘, <span style="white-space:pre"> </span>[email protected]=‘MSDASQL‘, <span style="white-space:pre"> </span>[email protected]=‘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

SQL server觸發器、存儲過程操作遠程數據庫插入數據,解決服務器已存在的問題