web-dev-qa-db-ja.com

分散トランザクションを作成せずにリモートストアドプロシージャからテーブルに挿入する方法

分散トランザクションを作成せずにリモートストアドプロシージャからローカルテーブルに挿入するにはどうすればよいですか?リモートサーバーでストアドプロシージャを実行し、その出力をローカルテーブルへの挿入のソースとして使用したいと考えています。

SQL Server 2008以降の場合、リンクサーバーのプロモーションを無効にできます。これは[詳細]プロパティタブにあります。または、次のようにスクリプトを作成できます。

EXEC master.dbo.sp_serveroption 
    @server=N'YourLinkedServer', 
    @optname=N'remote proc transaction promotion', 
    @optvalue=N'false'


SQL Server 2005の場合、OLE DBリンクサーバーを追加できます。これにより、接続文字列に詳細なオプションを入力できます。

このようなリンクサーバーを構成する方法を次に示します。 Server Objectsをクリックし、次にLinked Serversを右クリックしてNew Linked Server...を選択します。次のようにサーバーを構成します。

  • 「一般」タブ:
    • リンクサーバー:リンクサーバーの名前を入力してください
    • チェックその他のデータソース
    • プロバイダーの選択Microsoft OLE SQL ServerのDBプロバイダー
    • 製品名:ZzzZZzzzzのようにここに入力します
    • プロバイダー文字列を入力してください
      Data Source=<server or ip>,1433;Network Library=DBMSSOCN;Initial Catalog=<database name>;Enlist=false;
  • タブ「セキュリティ」:
    • 選択このセキュリティコンテキストを使用して作成
    • ユーザー名とパスワードを入力してください

接続文字列のEnlist=falseは、分散トランザクションを防止する必要があります。

12
Andomar