A partir du nombre de lignes retourné, vous pouvez peut-être deviner que vous avez commis une erreur, mais si vous n’avez aucune idée de la sortie escomptée, cela peut ne pas vous interpeller immédiatement. La documentation en ligne indique que vous pouvez éviter le problème en capturant les ID dans
Contrôle des données retournées (2)
des variables et en effectuant un contrôle d’erreur sur les valeurs capturées, comme le montre le code du listing 1, avant d’appeler la fonction sys.dm_db_index_physical_stats().
Un problème plus insidieux que j’ai découvert pendant les tests réalisés pour la rédaction de cet article réside dans le fait que SQL Server appelle la fonction object_id() à partir du contexte de votre base de données courante, avant tout appel à la fonction de gestion dynamique (DMF). Je me trouvais dans AdventureWorks, mais je souhaitais des informations sur une table de la base de données Pubs. J’ai donc exécuté le code suivant :
SELECT * FROM
sys.dm_db_index_physical_stats
(db_id(‘pubs’,
OBJECT_ID(N’dbo.authors’),
null, null, null);
Comme ma base de données courante ne comporte aucune table dbo.authors, SQL Server traite la fonction object_id comme NULL et j’obtiens les informations sur tous les objets dans Pubs. Mais si AdventureWorks avait une table dbo_authors, SQL Server utiliserait l’ID de celle-ci pour essayer d’extraire des informations de la base de données Pubs. J’obtiendrais alors soit une erreur indiquant qu’il n’existe pas d’ID d’objet de ce type dans la base de données, soit des données d’une autre table que celle souhaitée. Ce problème pourrait être difficile à résoudre, à supposer que vous deviniez l’existence d’un problème.
La seule solution consiste à définir complètement le nom de la table dans l’appel à la fonction TVF ou, comme dans le code précédent, à employer des variables afin d’obtenir l’ID du nom de table complet. Je trouve étrange de devoir indiquer le nom complet de l’objet avec celui de la base de données si un paramètre spécifie déjà le nom de base de données en question, mais il faudra s’en accommoder. Si vous écrivez des procédures enveloppes pour appeler la fonction sys.dm_db_index_physical_stats(), vous pouvez concaténer le nom de base de données sur le nom d’objet avant de récupérer l’ID d’objet et contourner ainsi le problème. La sortie de cette fonction est mystérieuse et vous souhaiterez probablement écrire une procédure qui accède à cette fonction et retourne les informations sous une forme légèrement plus conviviale.
Le troisième paramètre vous permet de préciser l’ID d’index pour la table spécifiée et, encore une fois, la valeur par défaut NULL signifie que vous souhaitez récupérer tous les index. Le quatrième paramètre indique le numéro de partition et NULL signifie que vous souhaitez, là encore, récupérer les informations pour l’ensemble des partitions. Le cinquième et dernier paramètre est le seul pour lequel la valeur NULL ne retourne pas toutes les informations. Il indique le mode d’échantillonnage adopté par SQL Server lorsqu’il récupère les informations. Les entrées valides sont DEFAULT, NULL, LIMITED, SAMPLED ou DETAILED. La valeur par défaut NULL correspond à LIMITED.
Téléchargez cette ressource
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Agents fantômes en EMEA : l’IA s’emballe, les conseils d’administration s’inquiètent
- L’illusion du contrôle à l’ère du cloud globalisé
- Souveraineté numérique : la résilience l’emporte sur l’indépendance totale
- IA de confiance : le facteur clé pour rentabiliser les projets d’entreprise
Articles les + lus
Sécurité : une approche dans la durée avant tout
Guide Ultime des Raccourcis Clavier Windows 11 pour les Professionnels IT
Quand les « travailleurs numériques » pallient le manque de bras dans l’industrie
Model Context Protocol : le contexte, grand oublié du débat
Microsoft dévoile MAI-Thinking-1 : un modèle de raisonnement « enterprise-grade » en preview publique
À la une de la chaîne Tech
- Sécurité : une approche dans la durée avant tout
- Guide Ultime des Raccourcis Clavier Windows 11 pour les Professionnels IT
- Quand les « travailleurs numériques » pallient le manque de bras dans l’industrie
- Model Context Protocol : le contexte, grand oublié du débat
- Microsoft dévoile MAI-Thinking-1 : un modèle de raisonnement « enterprise-grade » en preview publique
