SQL Server 2008, transtypage de date et optimiseur de requête

Avant SQL Server 2008, écrire une requête comportant un prédicat sur une date bien précise sans notion d’heures était plutôt fastidieux pour des requêtes sur des dates de transactions de stock par exemple où l’on désire un résultat à la journée . (Je prends l’exemple simple WHERE date =  ‘20091001’). Dans ce cas là il fallait procéder à une transformation de la colonne de type DATETIME. Cependant, le nettoyage ou suppression des heures de cette colonne pouvait poser un inconvénient majeur car cela nécessitait un transtypage (je pense aux fonctions CAST et FLOOR qui donnent le résultat 20090101 00:00:00 par exemple). Hors le seul fait de transtyper une valeur de colonne empêche l’optimiseur de  requêtes d’utiliser un index associé à cette même colonne. Cela obligeait par conséquent à écrire cette même requête avec un prédicat de date par intervalles (avec BETWEEN date AND date .).

Lire la suite

Recréer un mappage rompu entre un compte de connexion SQL Server avec l’authentifcation Windows et un utilisateur de bases de données

Vous avez déjà sans doute eu le cas où un administrateur système par mégarde, a supprimé un compte Windows utilisé par votre serveur SQL et qui est mappé à un ou plusieurs utilisateurs de vos bases de données . Vous avez sans doute maudit ce pauvre et malchanceux administrateur système car le problème dans ce cas est que le nouveau compte Windows recréé avec les mêmes paramètres ne possèdent pas le même SID et que le mappage avec les différents utilisateurs de bases de données existants est rompu. La question évidente ici est comment allons nous faire pour pouvoir revenir à une situation normale ?

Lire la suite

TSQL Challenge 15

Le quinzième challenge de la série est en ligne sur TSQL Challenges.

Pour rappel, ces petits challenges ont pour vocation de vous distraire, et éventuellement, de vous faire progresser sur tel ou tel point particulier.

Cette fois-ci, il s’agit de construire une matrice à base de marqueurs si et seulement si une valeur de ligne est divisible par une valeur de colonne.

Ce challenge et les suivants auront tous un but commun: écrire du code ensembliste, en transformant un jeu de données en un autre. Vos réponses doivent impérativement être envoyés avant le 02 novembre 2009 à minuit. Comme d’habitude nous espérons que ce challenge vous divertira.

Bon amusement !!

David BARBARIN (Mikedavem)
Elève ingénieur CNAM Lyon

Comprendre les enregistrements fantômes (Ghost records) avec SQL Server

En utilisant la vue dynamique système sys.dm_db_index_physical_stats, vous avez sans doute remarqué la présence d’une colonne ghost_record_count que je traduirais par nombre d’enregistrement fantômes. Cette colonne est incrémentée à chaque fois qu’un enregistrement est supprimé d’une table comportant au moins un index.

Lire la suite

Database Tuning Advisor (DTA) et ses limites d’utilisation

Vous avez sans doute, comme moi, utilisé l’outil de performance livré depuis la version 2005 de SQL Server et qui se nomme DTA (Database Tuning Advisor). Chez mon client actuel qui possède une base de données volumineuse en nombre d’objets (environ 15 000 entre les tables, les vues, les index et les statistiques) nous avons rencontré un problème quant à l’utilisation de cet outil en mode console.

Lire la suite