Une fonction de dépouillement d’une chaîne de valeurs séparées par des virgules

Je vous propose ici une fonction en pur T-SQL qui permet de retourner les valeurs que l’on trouve entre les virgules d’une chaîne en contenant un plus ou moins grand nombre.

Celle-ci repose sur une table de nombres, ce qui permet d’éviter de boucler par un WHILE, qui s’avère être contre-performant, SQL n’étant pas un langage itératif.
Lire la suite →

Trouver et changer le propriétaire d’un job de l’Agent SQL Server

Fonctionnalité pratique pour ne pas dire nécessaire, l’Agent SQL Server est le planificateur de tâches de SQL Server.
Il permet d’effectuer des tâches très variées, qui vont de l’exécution d’une procédure stockée à celle d’un script PowerShell en passant par celle d’un package SQL Server Integration Services et bien d’autres, et ce, à intervalles de temps réguliers et planifiés.

Côté sécurité, cette fonctionnalité n’est pas en reste, puisque tout job a un propriétaire.
Il est donc requis de vérifier que le propriétaire d’un job à les droits nécessaires à l’exécution de celui-ci.

Cela peut se faire de deux façons : par l’interface graphique de SQL Server Management Studio, ou bien en requêtes.
Voyons cela plus en détails :
Lire la suite →

Trouver et changer le propriétaire d’un plan de maintenance

Bien qu’incomplets en termes de fonctionnalités par rapport à une procédure stockée qui ferait la même chose, les plans de maintenance s’avèrent très simple à développer et à déployer dans un temps court. Je pense notamment à l’impossibilité de compresser des sauvegardes sous SQL Server 2008.

Comme beaucoup de choses effectuées à l’aide des interfaces graphiques proposées par SQL Server Management Studio, les effets produits par l’exécution d’une tâche ne sont pas toujours détaillés. Le propriétaire d’un plan de maintenance n’y échappe pas et est écrasé à chaque modification du plan.
Voici donc comment le trouver, et le changer.
Lire la suite →

Lister toutes les contraintes de clé étrangère d’une base de données

Voici un petit snippet permettant d’obtenir la liste de toutes les contraintes de clé étrangère d’une base de données avec :
– le nom de la contrainte,
– le nom de la table référençante,
– le nom de la colonne référençante dans la table référençante,
– le nom de la table référencée,
– le nom de la colonne référencée dans la table référencée.

Lire la suite →

Connaître les caractéristiques des statistiques de colonne d’une table

Voici un lot de requêtes qui retourne quelques caractéristiques intéressantes des statistiques d’une table, notamment :

– la quantité de données, en MB, qui a été échantillonnée
– la date de dernier échantillonnage
– le nom de la statistique, ainsi que les colonnes sur lesquelles la statistique échantillonne
– le nombre de lignes échantillonnées lors du dernier échantillonnage
– la densité (inverse de la sélectivité)
– le nombre de modifications dans les colonnes de la statistique depuis le dernier échantillonnage
– le SRT (Statistic Recomputation Threshold : seuil de ré-échantillonnage de la statistique)
C’est le nombre de modifications que les colonnes de la statistique doivent subir avant d’être ré-échantillonnées.
– quelques comparaisons par rapport au nombre réel de lignes de la table

Lire la suite →

Différence entre un index ordonné en cluster et un index non-cluster

Nous utilisons tous les jours de nombreux indexes : heure, calendrier, annuaire, sommaire et index d’un livre, …

Passons aux bases de données : quelle est la différence entre un index cluster et un index non-cluster ?
Si la différence peut sembler obscure de prime abord, le choix des index est crucial pour la performance globale de la base de données, et de coût quasiment nul en terme de modifications à apporter au schéma de celle-ci.

Les deux types d’index sont-ils complémentaires ? Quelles sont les conséquences du choix de la clé de ceux-ci ?

Lire la suite →