web-dev-qa-db-ja.com

SQLServerの互換性レベルへの影響

簡単な情報の質問:

SQL Server 2008では、データベースをSQL Server 2005から移行し、SQL Server2008のデータベースの互換性レベルを90(SQL Server 2005)に設定しています。

その意味は正確には何ですか?

これは、移行されたストアドプロシージャ、トリガー、および関数がSQL Server 2008で正常に機能することを意味しますが、欠点はありますか?

互換性レベルを100(SQL Server 2008)に設定する理由は何でしょうか。

パフォーマンス?追加機能?

ありがとう

13
EngelbertCoder

互換モードは、新しいバージョンのSQLと互換性がなくなった機能を持つアプリケーションを移行するのに役立ちます。 SQL 2008でサポートされなくなった関数を必要とするアプリケーションがある場合は、互換モードで実行することをお勧めします。それ以外の場合は、現在のSQLモードを使用します。私たちのビジネスは、データベースへの接続方法のためにSQL2000互換モードを必要とするアプリケーションを実行しています。ただし、SQL2012サーバーで実行されています。

コード内の特定の関数は、実行が具体的に異なるのではなく、必要なロジックが異なるため、パフォーマンスに影響を与える可能性があります。非常に一般化されたルールとして、2012、2008の関数用に最適化されたSQLコードは、SQL2000またはSQL7よりも高速です。これは、CTEやun/ivotなどの機能が追加されているためです。

8
u07ch

クエリオプティマイザー(SQL Server 2014)の改善点として舞台裏の機能を含む新機能を使用できないことを除けば、互換モードのままにしておくと、将来のアップグレードがより困難になります。 MSDNには、エディション間で異なるリストがあります http://msdn.Microsoft.com/en-us/library/bb510680%28v=sql.110%29.aspx

1
Arthur

データベースを新しいインスタンスにバックアップおよび復元するだけで、データベースを移行できると思い込まないでください。これは、多くの隠れた予期しないアプリケーションエラーの原因です。データベースの復元後にアプリケーションでエラーが発生した場合は、互換性レベルを確認してください。変更されている場合は、これが原因である可能性があります。互換性レベルを変更するという行為は、データベースにその機能セットを変更するように指示します。つまり、一部の機能が追加されますが、同時に一部の古い機能は削除されます。たとえば、FORBROWSE句は互換性レベル100のINSERTおよびSELECTINTOステートメントでは許可されていませんが、互換性レベル90では許可されていますが無視されます。したがって、アプリケーションでこの機能を使用すると、この変更により予期しない結果が生じる可能性があります。

この ウェブサイト は、互換性レベル、その長所と短所、および一連のベストプラクティスに関する多くの情報を提供できます。

0
igelr