5

リンク サーバーテーブルに行を挿入するために、ストアド プロシージャ内に SQL 挿入クエリがあります。

ストアド プロシージャは親トランザクション内で呼び出されるため、この Insert ステートメントは DTC を使用してリンク サーバーに行を挿入しようとします。

DTCの関与は避けたい。

Insert SQLステートメントがトランザクションスコープを無視するために(ヒントのように)それを行う方法はありますか?

4

2 に答える 2

4

私の提案は、ステージングテーブルに挿入したいものをすべて保存し、手順がオーバーランしたらクロスサーバー挿入を実行することです. 私の知る限り、SProc の実行中にいるトランザクションを無視する方法はありません。

対照的に、.NET 2.0 の System.Transaction 名前空間を使用すると、特定のステートメントに親スコープのトランザクションに参加しないように指示できます。これには、ストアド プロシージャではなくコードでロジックの一部を記述する必要がありますが、機能します。

関連するリンクは次のとおりです。

がんばれ、アラン。

于 2008-09-16T20:32:43.583 に答える
0

直接呼び出すのではなく、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)

于 2018-03-27T10:56:06.327 に答える