リンク サーバーテーブルに行を挿入するために、ストアド プロシージャ内に SQL 挿入クエリがあります。
ストアド プロシージャは親トランザクション内で呼び出されるため、この Insert ステートメントは DTC を使用してリンク サーバーに行を挿入しようとします。
DTCの関与は避けたい。
Insert SQLステートメントがトランザクションスコープを無視するために(ヒントのように)それを行う方法はありますか?
リンク サーバーテーブルに行を挿入するために、ストアド プロシージャ内に SQL 挿入クエリがあります。
ストアド プロシージャは親トランザクション内で呼び出されるため、この Insert ステートメントは DTC を使用してリンク サーバーに行を挿入しようとします。
DTCの関与は避けたい。
Insert SQLステートメントがトランザクションスコープを無視するために(ヒントのように)それを行う方法はありますか?
私の提案は、ステージングテーブルに挿入したいものをすべて保存し、手順がオーバーランしたらクロスサーバー挿入を実行することです. 私の知る限り、SProc の実行中にいるトランザクションを無視する方法はありません。
対照的に、.NET 2.0 の System.Transaction 名前空間を使用すると、特定のステートメントに親スコープのトランザクションに参加しないように指示できます。これには、ストアド プロシージャではなくコードでロジックの一部を記述する必要がありますが、機能します。
関連するリンクは次のとおりです。
がんばれ、アラン。
直接呼び出すのではなく、openquery を使用してリンク サーバー query/sp を呼び出してみてください。
そのため、insert into ... select * from mylinkedserver.pubs.dbo.authors の代わりに
例 DECLARE @TSQL varchar(8000), @VAR char(2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''' '' + @VAR + ''''''')'
INSERT INTO ..... EXEC (@TSQL)