[ad_1]
こんにちは-
すべて同じデータを保存する必要がある 4 つの SQL Server データベース サーバーがあります。 それらは冗長性のためにあります。 時間が経つにつれて、一部の SQL Server エージェント ジョブが 1 つのサーバーに追加され、他のサーバーには追加されなくなります。 不一致は、時間の経過とともにゆっくりと蓄積されます。 4 つの異なるサーバー間でジョブ名を比較しようとしています。 FULL OUTER JOIN を使用してすべてのジョブを含めましたが、サーバー B、C、および D のジョブはクエリ結果に「整列」しません。 最初のサーバー (サーバー A) はすべてを完全に並べますが、ジョブがサーバー A に存在せず、他の 3 つには存在する場合、結果は簡単に参照できるように並べられません。 他にこれを行う方法がわかりません。
以下は私が得ている結果ですが、望んでいません。 レポート 1、2、3 が見事に並んでいます。 レポート 4 と 5 はサーバー B、C、D に存在しますが、A には存在しません。ただし、サーバー A を除いて、レポート 4 と 5 は同じ行にある必要があります。 ありがとうございました !
SERVER_A SERVER_B SERVER_C SERVER_D REPORT_1 REPORT_1 REPORT_1 REPORT_1 REPORT_2 REPORT_2 REPORT_2 REPORT_2 REPORT_3 REPORT_3 REPORT_3 REPORT_3 NULL REPORT_4 NULL NULL NULL REPORT_5 NULL NULL NULL NULL REPORT_4 NULL NULL NULL REPORT_5 NULL NULL NULL NULL REPORT_4 NULL NULL NULL REPORT_5
私が試したこと:
SELECT A.name, B.name, C.name, D.name FROM A.msdb.dbo.sysjobs A FULL JOIN B.msdb.dbo.sysjobs B ON A.name = B.name FULL JOIN C.msdb.dbo.sysjobs C ON A.name = C.name FULL JOIN D.msdb.dbo.sysjobs D ON A.name = D.name
解決策 1
あなたの結合はすべて依存しています A.name
、 どっちが null
ジョブがサーバー A に存在しない場合。
次のようなことを試してください:
SQL
SELECT A.name, B.name, C.name, D.name FROM A.msdb.dbo.sysjobs A FULL JOIN B.msdb.dbo.sysjobs B ON B.name = A.name FULL JOIN C.msdb.dbo.sysjobs C ON C.name = Coalesce(A.name, B.name) FULL JOIN D.msdb.dbo.sysjobs D ON D.name = Coalesce(A.name, B.name, C.name)
[ad_2]
コメント