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

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のSQL 分析エンドポイント Microsoft Fabric のウェアハウス

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 で非推奨と発表されたシステム テーブル ( syslanguages syscacheobjects など) は、 sys スキーマのバック互換ビューにバインドされるようになりました。 SQL Server 2000 システム テーブルは複数のバージョンで非推奨とされているため、この変更は破壊的変更とは見なされません。

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

参照

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