0

多くのデータベースを含む複数のリンク サーバーがあります。すべてのサーバー/データベースで特定の情報を検索し、SQL 内で 1 つの結果セットを返そうとしています。

サーバー設定/ファイアウォールを変更せずに、リンクサーバーからの挿入を許可する方法を探しています。

リンクされたサーバー上にテーブルを作成し、それらをプルすることを考えましたが、それはしたくありません。主な理由は、一度に多くの人がこれを実行することになり、ずさんな感じがするからです。

いくつかの構文の問題がある場合は、申し訳ありませんが、特定の情報を削除しました。

このコードでエラーが発生しました。

(影響を受ける 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