Comment traîter des chaînes de caractères UTF-8 ?

De nombreux articles évoquent le fait que SQL Server ne supporte pas l’encodage UTF-8 mais uniquement l’encodage UTF-16. Ce support a d’ailleurs été amélioré à partir de SQL Server 2012 avec de nouveaux classements (voir Prise en charge d’Unicode sous SQL Server).

Mais l’expérience nous montre que de nombreuses données que l’on cherche à traiter sont en UTF-8, et on n’a pas nécessairement envie de sortir la grosse artillerie (par exemple un import via SQL Server Integration Service). Je vous propose donc une manière simple d’importer correctement dans un script T-SQL un fichier encodé en UTF-8.

Continuer la lecture

Plan de maintenance et tables sans index clustered

Même si certains oublient de les mettre en place (et s’étonnent ensuite de voir les performances de leur application se dégrader au fil du temps …), des plans de maintenance sont généralement implémentés sur les serveurs SQL Server, et intègrent notamment une défragmentation des index. Mais dans certains cas, ce type de tâches n’est pas suffisant … Continuer la lecture

SSIS : Insérer une ligne dans une table avec IDENTITY et récupérer l’identifiant

Dans les bases de données relationnelles, il est courant d’avoir des identifiants techniques au niveau de chaque table s’appuyant sur la notion d’IDENTITY, c’est-à-dire de compteur auto-incrémenté. Lorsque l’on cherche à remplir des tables via SQL Server Integration Services (SSIS), il convient donc de récupérer cet auto-incrément lors des insertions pour pouvoir les utiliser dans les tables filles. Continuer la lecture

Tester si on a des enregistrements

Il m’est assez souvent arrivé de voir des développeurs qui, pour savoir si leur programme avait des informations à traiter, comptaient le nombre d’enregistrement vérifiant leurs critères et lançaient leur traitement si ce nombre était différent de zéro. Mais en pratique, et surtout du point de vue des performances, cette façon de développer est plutôt catastrophique. Continuer la lecture

Vues obsolètes

Par défaut, les vues créées sous SQL Server sont uniquement des alias, c’est-à-dire que le code qu’elles contiennent (les tables et colonnes utilisées, …) est évalué à chaque exécution. Mais avec ce paramétrage par défaut, il est possible que les tables sous-jacentes évoluent et que l’on obtienne une vue qui, bien que définie, ne peut plus être utilisée.

Voici un petit papier au sujet des vues, et plus particulièrement autour d’une méthode permettant de détecter ces vues “fantômes”. Continuer la lecture

Via quels logins suis-je connecté ?

Les différentes habilitations attribuées à un compte se connectant à une instance SQL Server se font via la notion de logins. Un login peut notamment être un compte Windows ou un groupe Windows.

Mais lorsque l’on se connecte, on le fait via un compte, qui peut lui-même appartenir à un ou plusieurs groupes. Alors que se passe-t-il, et quel login faut-il regarder pour connaitre nos habilitations ? Continuer la lecture

Connexion à une instance nommée

SQL Server permet l’installation de plusieurs moteurs de bases de données sur un même système d’exploitation. Le terme consacré pour décrire ces moteurs installés est “instance”.

Cet article a pour objet de voir les bonnes pratiques pour se connecter à une instance SQL Server dans un contexte d’entreprise, et plus précisément dans le cas où l’on a un pare-feu à traverser. Continuer la lecture

sp_cycle_errorlog (anciennement DBCC ERRORLOG)

Tout administrateur système Windows a déjà eu l’occasion de pester devant une durée de chargement excessive du journal d’événement Windows (par exemple la rubrique Application ou Système) parce que la machine était en place depuis pas mal de temps et que l’on avait depuis le temps cumulé un nombre d’événements assez important. La limite est bien entendue paramétrable, mais il ne faut pas couper trop court, car on risquerait alors de supprimer des informations encore potentiellement nécessaires.

Côté SQL Server, nous avons aussi une journalisation d’événements. Celle-ci bascule sur un nouveau sous-ensemble à chaque redémarrage d’instance. Mais il n’est pas obligatoire de redémarrer le moteur pour repartir sur un nouveau jeu d’enregistrements, et nous allons voir que nous pouvons éviter les journaux trop longs même sur des instances restant actives très longtemps. Continuer la lecture