Vues de compatibilité de système (Transact-SQL)

 

THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Une grande partie des tables système des versions antérieures de SQL Server sont maintenant implémentées sous la forme d'un ensemble de vues. Ces vues sont connues sous le nom de vues de compatibilité car elles ont été exclusivement conçues à des fins de compatibilité descendante. Elles exposent les mêmes métadonnées que celles qui étaient disponibles dans SQL Server 2000. En revanche, elles n'exposent pas les métadonnées liées aux fonctionnalités introduites dans SQL Server 2005 et versions ultérieures. Par conséquent, lorsque vous utilisez une nouvelle fonctionnalité (comme Service Broker ou le partitionnement), vous devez impérativement utiliser les affichages catalogue.

Il existe une autre raison justifiant la mise à niveau vers les affichages catalogue : les colonnes des vues de compatibilité qui stockent les ID d'utilisateur et de type peuvent retourner la valeur NULL ou déclencher des dépassements arithmétiques. Vous pouvez en effet créer plus de 32 767 utilisateurs, groupes, rôles et types de données. Imaginons par exemple que vous devez créer 32 768 utilisateurs, puis exécuter la requête suivante : SELECT * FROM sys.sysusers. Si l'option ARITHABORT est activée (ON), la requête échoue en raison d'une erreur de dépassement arithmétique. Si l’option ARITHABORT est désactivée (OFF), la uid colonne renvoie la valeur NULL.

Pour éviter ces problèmes, nous vous recommandons d'utiliser les nouveaux affichages catalogue qui peuvent gérer le nombre accru d'ID d'utilisateur et d'ID de type. Le tableau suivant recense les colonnes sujettes à ce dépassement.

Nom de colonneVue de compatibilitéVue SQL Server 2005
xusertypesyscolumnsSys.Columns
usertypesyscolumnsSys.Columns
memberuidsysmembersSys.database_role_members
groupuidsysmembersSys.database_role_members
UIDsysobjectsSys.Objects
UIDsysprotectsSys.database_permissions

 Sys.server_permissions
fournisseur d’autorisationssysprotectsSys.database_permissions

 Sys.server_permissions
xusertypesystypesSys.types
UIDsystypesSys.types
UIDsysusersSys.database_principals
altuidsysusersSys.database_principals
GIDsysusersSys.database_principals
UIDsyscacheobjectsSys.dm_exec_plan_attributes
UIDsysprocessesSys.dm_exec_requests

Lors de la référence à une base de données utilisateur, les tables de système qui ont été annoncé comme déconseillés dans SQL Server 2000 (tel que syslanguages ou syscacheobjects), sont maintenant liées à la vue de compatibilité descendante dans le sys schéma. Les tables SQL Server 2000 étant déconseillées depuis plusieurs versions, cette modification n'est pas considérée comme une modification avec rupture.

Exemple : Si un utilisateur crée une table utilisateur appelée syslanguages dans une base de données utilisateur, dans SQL Server 2008, l’instruction SELECT * from dbo.syslanguages; dans cette base de données retourne les valeurs de la table utilisateur. À compter de SQL Server 2012, cette pratique retournera les données à partir de la vue système sys.syslanguages.

Affichages catalogue (Transact-SQL)
Mappage des Tables système avec les vues système (Transact-SQL)

Ajouts de la communauté

AJOUTER
Afficher: