SQL Server 2008からSQL Server 2012 Expressへの移動
-
12-12-2019 - |
質問
SQL Server 2008からSQL Server 2012 Expressへのアプリを移動していますが、すべてがうまくいきますが、いくつかのストアドプロシージャが構文エラーを持つと言っています。私はオンラインで見て、答えを見つけていない - SQL Server 2008でサポートされているがSQL Server 2012 Expressではなくサポートされていない構文の種類はありますか?
解決
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の互換モードを使用できなくなるため、上記のコードは次のようになります。
Msg 102、レベル15、状態1、行3 '* *='付近の誤った構文。
2008年には、代わりにこのエラーメッセージを入手します。
MSG 4147、レベル15、州1、1行目
Queryは、非ANSI外部結合を使用します 演算子("*=" or "=*"
)。変更なしでこのクエリを実行するには、 現在のデータベースの互換性レベルを80に設定してください。 ALTER DATABASEのset互換性 - オプション。それは強いです ANSI外部結合演算子を使用してクエリを書き換えることをお勧めします(左 外側の結合、右側の接合)。将来のバージョンのSQL Serverでは、 非ANSI結合演算子は、でもサポートされません 下位互換モード
しかし、エラーメッセージに提案されているようにデータベースを変更した場合、それは機能します。
ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
.
これはストレッチのようです。しかし、本当の情報がありませんそれは私が持っている唯一の推測についてです。
他のヒント
これはa SQL Server 2012の廃止予定の機能のリスト特にT-SQLセクションを見てください。SSDT(SQL Serverデータツール)を使用し、DBのオフラインコピーを作成してから、バージョンをSQL Server 2012に設定することもできます - 出力はバージョン間の構文非互換性の多くを示します。私はSSDTについてブログを書いた。ここで