Archives pour la catégorie Interrogation

Pourquoi ne trie t’on jamais une vue en SQL ?

En SQL ANSI, il est connu qu’une vue ne doit jamais être trié. On n’utilise donc jamais de ORDER BY dans une vue.
J’avoue que j’ai essayé de trouver une bon raison à cela et je l’ai finalement trouvé…

Comme vous le savez, une vue n’est qu’un enregistrement de requête, elle n’a pas d’existence physique comme une table à part les vues matérialisées mais c’est un autre problème!

Imaginez le scénario suivant :

Vous créez sur sql serveur une vue avec un order by. SQL Serveur 2000 ne posera aucune question et conservera le tri en réserve comme vous le souhaitez.

CREATE VIEW MAVUE AS SELECT NOM,PRENOM FROM FAMILLE ORDER BY NOM,PRENOM;

Jérome, votre collègue de toujours à besoin de cette vue mais lui, il veut trié par PRENOM,NOM…il écrit donc sa requète :

SELECT * FROM MAVUE ORDER BY PRENOM,NOM;

Jérome a le droit d’écrire cela.

Maintenant, Qu’avez vous demander à SQL SERVEUR 2000 ?

Il doit trier par NOM,PRENOM puis par PRENOM,NOM dans la même requête, avouez que c’est fort en chocolat de demander cela.

Voilà, pour moi, la raison pratique pour laquelle on ne doit jamais écrire un order by dans une vue. Parce qu’il y a aura 10 utilisateurs différents de la vue et qu’aucun d’eux n’aura les mêmes besoins. Alors même si sql serveur 2000 autorise le order by dans une vue, ne l’utilisez jamais dans la vue mais en dehors, au plus prés du besoin!

Que signifie le terme SQL Dynamique sous SQL Server ?

Chaque développeur confirmé ou DBA connaît la définition et l’ usage du SQL Dynamique mais une personne qui découvre les bases de données ne saura pas nécessairement ce que signifie ce terme surtout que l’ aide en ligne de SQL Server ne fournit pas de définition du concept et que très peu d’ auteurs ont trouvé utile de préciser ce concept, spécifiquement pour SQL Server, sur le web.

Lire la suite

Comment définir des paramètres optionnels pour une procédure stockée ?

Ce matin, j’ étais en discussion avec un prospect, et il me pose la question suivante : savez-vous comment définir un paramètre optionnel pour une SP ?

Ma réponse à froid : tous les paramètres sont obligatoires en .Net mais je place un IF dans la procédure stockée afin que si la valeur soit égale à 0 on n’ effectue une requête sans le paramètre.

En fait, il est parfaitement possible d’ avoir un paramètre optionnel, c’ est à dire que l’ on ne déclare pas dans le code ASP.NET. Il suffit d’ affecter une valeur par défaut au paramètre de la procédure par exemple

CREATE PROCEDURE ListeSalarie

@Age int = 18

AS

SELECT Nom,Matricule FROM Salarie WHERE Age>@Age;

Par cette procédure, vous pouvez appeler la procédure ListeSalarie sans paramètre pour avoir la liste des salarie supérieur à l’ age légal de la majorité.

Par cette procédure, vous pouvez appeler la procédure ListeSalarie avec un paramétre @age pour avoir la liste des salarie supérieur à cette @age donné.

[SQL] Concours SQL Pro – le publipostage (2 étoiles).

Comme la date des résultats est dépassée et que je pense que le concours reste à titre pédagogique, je me permet de publier quelques résultats qui peuvent vous instruire.

Aujourd’hui, utilisation des CTE pour multiplie une ligne.

( Première Partie ) Problème N°2 Le publipostage. Pour info, j’ai cherche un moment comment multiplier des données avant de comprendre que c’était les CTE la solution.

Réponse :
Lire la suite

[SQL] Problème n° 7 – le comptage ( 3 étoiles ).

Je vous encourage à répondre aux nombreux problèmes proposés par sql pro en sql : ici

Aujourd’hui, je vous propose de résoudre un problème par application des fonctions de fenêtrage et de ranking, nouvelle fonctionnalité de sql serveur 2005, dans le but de numéroter des lignes lors d’un SELECT.

Problème : http://sqlpro.developpez.com/Exercices/SQL_AZ_P1.html – Problème n° 7 – le comptage.

Solution :
Lire la suite