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

適用対象:SQL Server

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

カタログ ビューへアップグレードするもう 1 つの理由としては、ユーザー ID および型 ID を格納する互換性ビューの列では NULL が返されるか算術オーバーフローが発生する可能性があることが挙げられます。 これは、32,767 を超えるユーザー、グループ、ロール、および 32,767 個のデータ型を作成できるためです。 たとえば、32,768 人のユーザーを作成し、次のクエリを実行する場合: 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 で非推奨と発表されたシステム テーブル (syslanguagessyscacheobjects など) が、sys スキーマのバック互換性ビューにバインドされるようになりました。 SQL Server 2000 システム テーブルは複数のバージョンで非推奨とされているため、この変更は破壊的変更とは見なされません。

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

参照

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