ウェブサイトをオラクルサーバーからSQLサーバーに移行中。次のタイプのクエリに行き詰まりました。このようなテーブルと結合がいくつかあります。たとえば、次のようになります。
Select *
from Job_master J,
Batch_master B
where J.BUS_DATE (+)= B.BUS_DATE
すべてのクエリを右外部結合または左外部結合を使用するように変換する以外に解決策はありますか?
ウェブサイトをオラクルサーバーからSQLサーバーに移行中。次のタイプのクエリに行き詰まりました。このようなテーブルと結合がいくつかあります。たとえば、次のようになります。
Select *
from Job_master J,
Batch_master B
where J.BUS_DATE (+)= B.BUS_DATE
すべてのクエリを右外部結合または左外部結合を使用するように変換する以外に解決策はありますか?
上記に似たこのコマンドを使用できます
Select * from Job_master J right outer join Batch_master B
on J.BUS_DATE = B.BUS_DATE
非 ANSI 外部結合は、互換性レベル 80 (SQL 2000) を使用している場合にのみ記述できます。SQL Server 2008R2 の同じ構文は次のようになります。
select *
from dbo.Address ad, dbo.Street st
where st.Id *= ad.StreetId
((+) を * に変換します)
互換性レベル 80 のないデータベースでこれを実行すると、これが不可能であるという素晴らしいエラー メッセージが表示されます。
メッセージ 4147、レベル 15、状態 1、行 4 クエリは非 ANSI 外部結合演算子 (" =" または "= ") を使用しています。このクエリを変更せずに実行するには、ALTER DATABASE の SET COMPATIBILITY_LEVEL オプションを使用して、現在のデータベースの互換性レベルを 80 に設定してください。ANSI 外部結合演算子 (LEFT OUTER JOIN、RIGHT OUTER JOIN) を使用してクエリを書き直すことを強くお勧めします。SQL Server の将来のバージョンでは、下位互換性モードであっても非 ANSI 結合演算子はサポートされません。
しかし、それは実行可能かもしれませんが、それを使用することはまったく推奨されていません (あいまいで非推奨です)。コメントに記載されている他の質問を読んでください。Jeremiah が適切な回答をしています。