システム互換性ビュー (Transact-sql SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン)

以前のリリースの SQL Server の多くのシステム テーブルは、一連のビューとして実装されるようになりました。 これらのビューは互換性ビューと呼ばれ、旧バージョンとの互換性のためだけに用意されています。 互換性ビューでは、SQL Server 2000 (8.x) で利用できるメタデータと同じメタデータを利用できますが、 SQL Server 2005 (9.x) 以降で導入された機能に関連するメタデータは利用できません。 したがって、Service Broker やパーティションなどの新機能を使用するときは、カタログ ビューを使用するように切り替える必要があります。

カタログ ビューへアップグレードするもう 1 つの理由としては、ユーザー ID および型 ID を格納する互換性ビューの列では NULL が返されるか算術オーバーフローが発生する可能性があることが挙げられます。 これは、32767を超えるユーザー、グループ、およびロールと32767データ型を作成できるためです。 たとえば、32768ユーザーを作成し、次のクエリを実行したとします SELECT * FROM sys.sysusers 。 ここで ARITHABORT が ON に設定されている場合、クエリは算術オーバーフロー エラーで失敗します。 ARITHABORT が OFF に設定されている場合、 uid 列は NULL を返します。

これらの問題を回避するには、増加したユーザー Id と種類 Id を処理できる新しいカタログビューを使用することをお勧めします。 次の表に、このオーバーフローが発生する可能性のある列を示します。

列名 互換性ビュー SQL Server 2005 ビュー
xusertype syscolumns sys.columns
usertype syscolumns sys.columns
memberuid sysmembers sys.database_role_members
groupuid sysmembers sys.database_role_members
uid sysobjects sys.objects
uid sysprotects sys.database_permissions

sys.server_permissions
権限 sysprotects sys.database_permissions

sys.server_permissions
xusertype systypes sys.types
uid systypes sys.types
uid sysusers sys.database_principals
altuid sysusers sys.database_principals
gid sysusers sys.database_principals
uid syscacheobjects sys.dm_exec_plan_attributes
uid sysprocesses sys.dm_exec_requests

ユーザーデータベースで参照されている場合、SQL Server 2000 で非推奨と発表されたシステムテーブル ( sys.syslanguagessyscacheobjects など) は、 sys スキーマのバック互換ビューにバインドされるようになりました。 SQL Server 2000 システムテーブルは複数のバージョンで非推奨とされているため、この変更は互換性に影響する変更とは見なされません。

例: ユーザーが sys.syslanguages という名前のユーザーテーブルをユーザーデータベースに作成した場合、SQL Server 2008 では、そのデータベースのステートメントによって、 SELECT * from dbo.syslanguages; ユーザーテーブルから値が返されます。 SQL Server 2012 以降、この方法ではシステムビュー sys.syslanguages からデータが返されます。

参照

カタログ ビュー (Transact-SQL)
システムビューへのシステムテーブルのマッピング (Transact SQL)