互換性ビュー (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 |
|
grantor |
sysprotects |
|
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 |