2015-03-02 67 views
0

我在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 

回答

0

您的数据库管理员需要在目标服务器上允许该权限。就个人而言,我只是将表从一台服务器复制到另一台服务器,然后存储过程将针对复制的数据运行。

如果您确实需要去跨服务器,请参阅this SO问题。