アプリを SQL Server 2008 から SQL Server 2012 Express に移行しています。問題はありませんが、いくつかのストアド プロシージャで構文エラーがあると表示されます。オンラインで調べましたが、答えが見つかりませんでした。SQL Server 2008 (Standard) でサポートされていて、SQL Server 2012 Express ではサポートされていない構文の種類はありますか?
2 に答える
2008年に2000互換モードを使用していて、ストアドプロシージャに古いスタイルの外部結合があった場合、1つの可能性があると思います:
SELECT o.name, c.name
FROM sys.objects AS o, sys.columns AS c
WHERE o.[object_id] *= c.[object_id];
この構文は SQL Server 2000 で機能しますが、それ以来非推奨になっています。2005、2008、および 2008 R2 では、80 互換モードを使用する場合にシューホーンを使用できます。SQL Server 2012 以降、80 互換モードを使用できなくなったため、上記のコードは次のエラーで失敗します。
メッセージ 102、レベル 15、状態 1、行 3
'*=' 付近の構文が正しくありません。
2008 年には、代わりに次のエラー メッセージが表示されます。
メッセージ 4147、レベル 15、状態 1、行 3
クエリは非 ANSI 外部結合演算子 ("*=" or "=*"
) を使用しています。このクエリを変更せずに実行するには、ALTER DATABASE の SET COMPATIBILITY_LEVEL オプションを使用して、現在のデータベースの互換性レベルを 80 に設定してください。ANSI 外部結合演算子 (LEFT OUTER JOIN、RIGHT OUTER JOIN) を使用してクエリを書き直すことを強くお勧めします。SQL Server の将来のバージョンでは、下位互換性モードであっても非 ANSI 結合演算子はサポートされません。
ただし、エラー メッセージで提案されているようにデータベースを変更すると、次のように動作します。
ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
これはストレッチのようです。しかし、いくつかの本当の情報がなければ、それは私が持っている唯一の推測です.