0

アプリを SQL Server 2008 から SQL Server 2012 Express に移行しています。問題はありませんが、いくつかのストアド プロシージャで構文エラーがあると表示されます。オンラインで調べましたが、答えが見つかりませんでした。SQL Server 2008 (Standard) でサポートされていて、SQL Server 2012 Express ではサポートされていない構文の種類はありますか?

4

2 に答える 2

5

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;

これはストレッチのようです。しかし、いくつかの本当の情報がなければ、それは私が持っている唯一の推測です.

于 2012-05-22T02:03:33.700 に答える
3

SQL Server 2012 で廃止された機能の一覧を次に示します。特に、T-SQL セクションを参照してください。また、SSDT (SQL Server Data Tools) を使用して、DB のオフライン コピーを作成し、バージョン ターゲットを SQL Server 2012 に設定することもできます。出力には、バージョン間の構文の非互換性の多くが示されます。ここで役立つかもしれない SSDT についてのブログを書きました。

于 2012-05-23T16:20:38.200 に答える