1
私のSQL Server 2012データベースでは、レコードを取得してそれに応じて更新する必要がある2番目のSQL Serverデータベースへのリンクサーバー参照があります。SQL Serverのリンクされたサーバーのアップデート - ひどいパフォーマンス
UPDATE
Linked_Tbl
SET
Transferred = 1
FROM
MyLinkedServer.dbo.MyTable Linked_Tbl
JOIN
MyTable Local_Tbl ON Local_Tbl.LinkedId = Linked_Tbl.Id
JOIN
MyOtherTable Local_Tbl2 ON Local_Tbl.LocalId = Local_Tbl2.LocalId
私はそれがまだ実行していたとして実行されているの時間後に停止しなければならなかった:
は、私が実行しようとしています次の更新ステートメントを持っています。
オンラインで、found solutionsを読んだことがあります。最適な解決策は、Linked Server自体にストアドプロシージャを作成して、ワイヤで実行するのではなく更新ステートメントを実行することです。私が持っている
問題は、次のとおりです。
- 私は他のサーバー上の任意の手順を作成する能力を持っていません。
- このプロシージャを作成することができたとしても、すべてのIDをストアドプロシージャに渡して更新する必要があり、何千ものIDを効率的に処理する方法がわかりません(明らかに、私は最初にその手順を作成することはできません)。
多くの場合、別のサーバーに変更を加える権限を持っていないということを考えれば、他の解決方法があると思います。
ローカルでアップデートをローカルに送信する手順。あなたがこれを行うことができない場合は、リンクされたサーバーにRBARアップデートを取得しようとしています(私はこれを回避する方法はないと思います)。回避策があるとは思わないでください。あなたの#2に答えるには、リンクされたサーバーからIDを選択するほうが、リモート更新の一部として個々の行を個別に送信する方がはるかに効率的です。 –
リモートサーバーでストアドプロシージャを作成する必要はありません。アップデートを含む動的SQLを使用するだけで、 'EXEC AT'でコードを実行するだけで、リモートサーバはすべてを行います。ここを見てください:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ec527f63-d454-4b8a-81e9-23a2ff54c1ca/execute-at-with-dynamic-linked-server-name?forum = transactsql – Alejandro
@Alejandro、ありがとう、これはこの周りの唯一の真の方法のようです...私は巨大なファンではありませんが、この状況で与えられた最良の選択肢のようです。 –