次の方法で共有


互換性ビュー (Transact-SQL)

以前のリリースの SQL Server の多くのシステム テーブルは、一連のビューとして実装されるようになりました。 これらのビューは互換性ビューと呼ばれ、旧バージョンとの互換性のためだけに用意されています。 互換性ビューでは、SQL Server 2000 で利用できるメタデータと同じメタデータを利用できますが、 SQL Server 2005 以降で導入された機能に関連するメタデータは利用できません。 したがって、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

grantor

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 で非推奨と発表されたシステム テーブル (syslanguages または syscacheobjects など) は、sys スキーマで旧バージョンとの互換性ビューにバインドされています。 SQL Server 2000 システム テーブルは複数のバージョンで非推奨になっているので、この変更は重大な変更とはみなされません。

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

関連項目

参照

カタログ ビュー (Transact-SQL)

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