Vues de compatibilité système (Transact-SQL)
S’applique à : point de terminaison d’analytique SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL Analytics dans Microsoft Fabric Warehouse dans Microsoft Fabric
La plupart des tables système des versions antérieures de SQL Server sont désormais 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. Les vues de compatibilité exposent les mêmes métadonnées que celles disponibles dans SQL Server 2000 (8.x). Toutefois, les vues de compatibilité n’exposent aucune des métadonnées liées aux fonctionnalités introduites dans SQL Server 2005 (9.x) et versions ultérieures. Par conséquent, lorsque vous utilisez de nouvelles fonctionnalités, telles que Service Broker ou le partitionnement, vous devez basculer vers l’utilisation des vues de 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 ARITHABORT est défini sur OFF, la colonne uid retourne 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 la colonne | Vue de compatibilité | Vue 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 |
Concédant | 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 |
Lorsqu’elles sont référencées dans une base de données utilisateur, les tables système qui ont été annoncées comme déconseillées dans SQL Server 2000 (telles que syslanguages ou syscacheobjects), sont désormais liées à la vue de compatibilité arrière dans le schéma sys . 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;
de cette base de données renvoie les valeurs de la table utilisateur. À compter de SQL Server 2012, cette pratique retourne les données de la vue système sys.syslanguages.
Voir aussi
Affichages catalogue (Transact-SQL)
Mappage des tables système avec les vues du système (Transact-SQL)