我在SP工作,我在不同的服务器有两个表同步两个表,一个是主要的,另一个是一个副本,但丝毫少列,我要的是运行在SP每隔5分钟在主表,以确认是否有新的记录已被创建,如果是采取这些新的记录,并将其插入到复制表,驻留在其他服务器。SP使用链接的服务器的SQL Server
搜索,我发现这个脚本至极的解决方案在同一台服务器工作正常,但是当我尝试与失败的链接服务器运行....请别人帮助我。
这是一个得到错误....
OLE DB提供程序“SQLNCLI”链接服务器“ESDBCGW001T”返回 消息“合作伙伴事务管理器已禁止 远程/网络的支持交易“。消息7391,级别16,状态2,过程 sp_newrecords,行37操作无法执行,因为 链接服务器“LINKEDSERVER”的OLE DB提供程序“SQLNCLI”无法启动分布式事务。
所有配置都是完美的,当我运行插入不变量运行良好,我的意思是,不是@val1
,@val2
和@val3
我用实际值1
,'A'
,'B'
。
USE [XXX]
GO
/****** Object: StoredProcedure [dbo].[sp_newrecords] Script Date: 03/02/2015 11:11:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <>
-- Create date: <>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_newrecords]
-- Add the parameters for the stored procedure here
AS
BEGIN
DECLARE @val1 int
DECLARE @val2 nvarchar(50)
DECLARE @val3 nvarchar(50)
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE mycur1 CURSOR for
select empid,fname,lname from employee
where empid = 508 --this is for test only
OPEN mycur1
FETCH NEXT FROM mycur1 INTO @val1, @val2 , @val3
WHILE @@Fetch_Status = 0
BEGIN
begin tran /* default read committed isolation level is fine */
if not exists (select * from openquery (linkedserver,'select * from DBNAME.dbo.Employee_backup'))
--insert employee_backup values (@val1, @val2 , @val3)
begin
INSERT into [linkedserver].[DBNAME].[dbo].[Employee_backup] values (@val1, @val2 , @val3)
end
/*if not exists (select * from employee_backup with (updlock, rowlock, holdlock)
where employee_backup.empid = @val1
and employee_backup.fname = @val2)
--insert employee_backup values (@val1, @val2 , @val3)
INSERT [LINKEDSERVER].[DBNAME].[dbo].[Employee_backup] values (@val1, @val2 , @val3)*/
--else
-- /* update */
commit /* locks are released here */
FETCH NEXT FROM mycur1 INTO @val1, @val2 , @val3`enter code here`
END
CLOSE mycur1
DEALLOCATE mycur1
END