USE [trtfms]
GO
/****** Object: Trigger [dbo].[tr_check_accept_note_update] Script Date: 09/28/2018 13:06:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_check_accept_note_update]
ON [dbo].[t_check_accept_note]
AFTER update
AS
BEGIN
--item
declare @medc_id int,@batch_no varchar(50),@quantity int,@produce_time varchar(20),@end_time varchar(20)
--form
declare @form_id int,@number varchar(20),@Suply_id int,@status_old varchar(10),@status_new varchar(10)
--medc
declare @medc_no varchar(20)
--Suply
declare @Suply_no varchar(20)
select @form_id = id,
@number = number,
@Suply_id = qualifiedSupplier_id,
@status_new = review_status
from inserted
select @status_old = review_status
from deleted
select @Suply_no = customer_number from t_qualifiedSupplier where id = @Suply_id
if @status_old <> '3' and @status_new = '3'
begin
declare cu_xsd cursor for select qualified_medicine_id,batch_production,quantity,produce_time,end_time from t_checkaccept_item where receiving_id = @form_id
--
open cu_xsd
FETCH NEXT FROM cu_xsd into @medc_id,@batch_no,@quantity,@produce_time,@end_time
While @@FETCH_STATUS=0
Begin
declare @dp_id varchar(255)= '',@works varchar(255)=''
select @medc_no = medc_no,@dp_id=dp_id from t_qualified_medicine where id = @medc_id
if @dp_id = '2001'
begin
select @works = 'XP2'
end
else
begin
select @works = 'SSP'
END
--入库下发表
--LINK_62指的是链接服务器192.168.0.62服务器,可以用OPENDATASOURCE ('SQLOLEDB', 'Data Source=192.168.0.62;User ID=sa;Password=trtsales' )代替
insert into LINK_62.fms_wms_food.dbo.fms_in_task(Bilno,Supply,Store,Matno,Batch,Statu,Quant,Makdat,Vddat,Mvtyp,Senddat,Sflag,Itmno,works)
values(@number,@Suply_no,'004',@medc_no,@batch_no,'A',@quantity,@produce_time,@end_time,'521',getdate(),'0','1',@works)
--抄送表
insert into LINK_62.fms_wms_food.dbo.fms_in_task_send(Bilno,Supply,Store,Matno,Batch,Statu,Quant,Makdat,Vddat,Mvtyp,Senddat,Sflag,Itmno,works)
values(@number,@Suply_no,'004',@medc_no,@batch_no,'A',@quantity,@produce_time,@end_time,'521',getdate(),'0','1',@works)
FETCH NEXT FROM cu_xsd into @medc_id,@batch_no,@quantity,@produce_time,@end_time
end
CLOSE cu_xsd
DEALLOCATE cu_xsd
end
END
上面是完整的触发器代码,要实现一个服务器A新增一条数据的同时插到服务器B上的一个表中,在Web界面保存时,一直保存不上,后台报错如下:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 无法执行该操作,因为
链接服务器 "(null)" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务。
由于服务重装了系统,猜测可能是数据库配置出了问题,于是在服务器A创建了服务器B的链接服务器,创建代码如下:
EXEC sp_addlinkedserver
@server='LINK_62', --链接服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='192.168.0.62' --要访问的的数据库所在的服务器的ip
GO
EXEC sp_addlinkedsrvlogin
'LINK_62', --链接服务器别名
'false',
NULL,
'sa', --要访问的数据库的用户
'trtsales' --要访问的数据库,用户的密码
GO
未解决问题,根据下面的《SQL Server 分布式数据库的问题和解决方法1》
SQL Server 分布式数据库的问题和解决方法1 - CSDN博客
https://blog.csdn.net/xys_777/article/details/5729339
SQL Server 分布式数据库的问题和解决方法2 - CSDN博客
https://blog.csdn.net/xys_777/article/details/5729334