0

我有多个链接服务器,包含许多数据库。我正在尝试在所有服务器/数据库中搜索特定信息并返回 SQL 中的一个结果集。

我正在寻找一种不更改服务器设置/防火墙以允许从链接服务器插入的方法。

我想过在链接服务器上创建一个表,然后将它们拉入,但我不想这样做。主要是因为很多人会同时运行这个,感觉很草率。

如果有一些语法问题,我深表歉意,我删除了具体信息。

我收到此代码的错误。

(2 行受影响)链接服务器“server1”的 OLE DB 提供程序“SQLNCLI10”返回消息“事务管理器已禁用其对远程/网络事务的支持。”。消息 7391,级别 16,状态 2,第 3 行 由于链接服务器“server1”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务,因此无法执行操作。

到目前为止,我有:

DECLARE @SERVER VARCHAR(20),@EmpNo VARCHAR(10)
SET @EmpNo = '0000000001'

CREATE TABLE #EMPNOLOCATIONTEMP ( ServerName nvarchar(50),CompanyCode nvarchar(20), EmpNo nvarchar(20), Name nvarchar(500) )

DECLARE @TEMP TABLE (servername nvarchar(50)) -- remove and find table with information
insert into @TEMP
values('server1'),('server2'),('server3')


DECLARE db_cursor CURSOR FOR  

    SELECT ServerName
    FROM @TEMP

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @SERVER   

WHILE @@FETCH_STATUS = 0   
BEGIN   

    INSERT INTO #EMPNOLOCATIONTEMP
    --EXECUTE [dbo].usp_Ulti_EmpNo_Search @EmpNo,@SERVER
            EXECUTE('

            EXECUTE(''

            CREATE table #Results (CompanyCode nvarchar(20), EmpNo nvarchar(20), Name nvarchar(500))

            EXECUTE sp_MSforeachdb ''''USE ?; 

            IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''''''''[dbo].[TableWithInfo]'''''''') )
            BEGIN
                INSERT INTO #Results
                select CompanyCode,EmpNo,Name
                from TableWithInfo
                where EmpNo = '''''''''+@EmpNo+'''''''''
            END
            ''''

            SELECT * FROM #Results

            '') AT '+@SERVER+'

            ')

    UPDATE #EMPNOLOCATIONTEMP SET ServerName = @SERVER WHERE ServerName is null

FETCH NEXT FROM db_cursor INTO @SERVER 
END   

CLOSE db_cursor   
DEALLOCATE db_cursor


SELECT * FROM  #EMPNOLOCATIONTEMP 

DROP TABLE #EMPNOLOCATIONTEMP

先感谢您。

4

0 回答 0