システム互換性ビュー (TRANSACT-SQL)System Compatibility Views (Transact-SQL)

適用対象: ○SQL Server (2012 以降) XAzure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2012) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

以前のリリースの SQL ServerSQL Server の多くのシステム テーブルは、一連のビューとして実装されるようになりました。Many of the system tables from earlier releases of SQL ServerSQL Server are now implemented as a set of views. これらのビューは互換性ビューと呼ばれ、旧バージョンとの互換性のためだけに用意されています。These views are known as compatibility views, and they are meant for backward compatibility only. 互換性ビューでは、SQL Server 2000 (8.x)SQL Server 2000 (8.x) で利用できるメタデータと同じメタデータを利用できますが、The compatibility views expose the same metadata that was available in SQL Server 2000 (8.x)SQL Server 2000 (8.x). SQL Server 2005 (9.x)SQL Server 2005 (9.x) 以降で導入された機能に関連するメタデータは利用できません。However, the compatibility views do not expose any of the metadata related to features that are introduced in SQL Server 2005 (9.x)SQL Server 2005 (9.x) and later. したがって、Service BrokerService Broker やパーティションなどの新機能を使用するときは、カタログ ビューを使用するように切り替える必要があります。Therefore, when you use new features, such as Service BrokerService Broker or partitioning, you must switch to using the catalog views.

カタログ ビューへアップグレードするもう 1 つの理由としては、ユーザー ID および型 ID を格納する互換性ビューの列では NULL が返されるか算術オーバーフローが発生する可能性があることが挙げられます。Another reason for upgrading to the catalog views is that compatibility view columns that store user IDs and type IDs may return NULL or trigger arithmetic overflows. これは、32,767 を超えるユーザー、グループ、およびロールと、32,767 のデータ型を作成できるためです。This is because you can create more than 32,767 users, groups, and roles, and 32,767 data types. たとえば、32,768 人のユーザーを作成し、次のクエリを実行した場合:SELECT * FROM sys.sysusersします。For example, if you were to create 32,768 users, and then run the following query: SELECT * FROM sys.sysusers. ここで ARITHABORT が ON に設定されている場合、クエリは算術オーバーフロー エラーで失敗します。If ARITHABORT is set to ON, the query fails with an arithmetic overflow error. ARITHABORT が OFF に設定されている場合、 uid列は NULL を返します。If ARITHABORT is set to OFF, the uid column returns NULL.

これらの問題を回避するには、より多くのユーザー ID および型 ID を処理できる、新しいカタログ ビューを使用することをお勧めします。To avoid these problems, we recommend that you use the new catalog views that can handle the increased number of user IDs and type IDs. 次の表に、このオーバーフローが発生する可能性のある列を示します。The following table lists the columns that are subject to this overflow.

列名Column name 互換性ビューCompatibility view SQL Server 2005 ビューSQL Server 2005 view
xusertypexusertype syscolumnssyscolumns sys.columnssys.columns
usertypeusertype syscolumnssyscolumns sys.columnssys.columns
memberuidmemberuid sysmemberssysmembers sys.database_role_memberssys.database_role_members
groupuidgroupuid sysmemberssysmembers sys.database_role_memberssys.database_role_members
uiduid sysobjectssysobjects sys.objectssys.objects
uiduid sysprotectssysprotects sys.database_permissionssys.database_permissions

sys.server_permissionssys.server_permissions
権限の許可者grantor sysprotectssysprotects sys.database_permissionssys.database_permissions

sys.server_permissionssys.server_permissions
xusertypexusertype systypessystypes sys.typessys.types
uiduid systypessystypes sys.typessys.types
uiduid sysuserssysusers sys.database_principalssys.database_principals
altuidaltuid sysuserssysusers sys.database_principalssys.database_principals
gidgid sysuserssysusers sys.database_principalssys.database_principals
uiduid syscacheobjectssyscacheobjects sys.dm_exec_plan_attributessys.dm_exec_plan_attributes
uiduid sysprocessessysprocesses sys.dm_exec_requestssys.dm_exec_requests

システムでは、SQL Server 2000 で非推奨と発表されたテーブル、ユーザー データベースで参照された場合、(などsyslanguagesまたはsyscacheobjects)、バック互換性ビューにバインドされますが、sysスキーマ。When referenced in a user database, system tables which were announced as deprecated in SQL Server 2000 (such as syslanguages or syscacheobjects), are now bound to the back-compatibility view in the sys schema. SQL Server 2000 システム テーブルは複数バージョンには非推奨とされているため、この変更は重大な変更とは見なされません。Since the SQL Server 2000 system tables have been deprecated for multiple versions, this change is not considered a breaking change.

例: ユーザーというユーザー テーブルを作成する場合syslanguagesユーザー データベース、SQL Server 2008 で、ステートメントでSELECT * from dbo.syslanguages;そのデータベースの値を返す、ユーザー テーブルから。Example: If a user creates a user-table called syslanguages in a user-database, in SQL Server 2008, the statement SELECT * from dbo.syslanguages; in that database would return the values from the user table. SQL Server 2012 以降では、この演習用データが返されます、システム ビューからsys.syslanguagesします。Beginning in SQL Server 2012, this practice will return data from the system view sys.syslanguages.

参照See Also

カタログ ビュー (Transact-SQL) Catalog Views (Transact-SQL)
システム ビューへのシステム テーブルのマッピング(TRANSACT-SQL)Mapping System Tables to System Views (Transact-SQL)