OVH Cloud OVH Cloud

procédure stockée, passer un paramètre pour le tri

17 réponses
Avatar
Olivier
Bonjour

Dans une proc=E9dure stock=E9e, comment passer en param=E8tre une variable
pour le tri ?

create PROCEDURE MyProc
AS
BEGIN
SET NOCOUNT on;

SELECT *
FROM matable

ORDER BY myvar ??? DESC ou ASC en fonction

END
Merci
Olivier

7 réponses

1 2
Avatar
olivier
super ca fonctionne

.. il me reste plus qu'a comprendre comme utiliser : les cte-recursives
(autre post.)


merci
olivier




"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de news:
%
Case @OrderBy WHEN NULL THEN Field1 ELSE Null END

qu'il n'aime pas



Exact. Visiblement le message d'erreur indique que trier en utilisant une
valeur constante plutôt qu'un nom de champ n'est pas supporté ce qui est
confirmé si j'essaie par exemple :

select * from sys.databases order by NULL (qui donne donc le même
message).

Donc si le tri n'est pas défini, trier sur un champ par défaut comme la
clé primaire par exemple plutôt qu'en utilisant la constante NULL...




Avatar
Sylvain Lafontaine
À moins que vous ne soyez en je ne sais plus quel mode de compatibité, vous
ne pouvez pas utiliser un Case calculé contre une valeur nulle; de sorte que
vous devez écrire à la place un Case logique:

Case When @OrderBy Is NULL THEN Field1 When @OrderBy = 'Field1' Then Field1
Else Null END

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"olivier" wrote in message
news:%
super ca fonctionne

.. il me reste plus qu'a comprendre comme utiliser : les cte-recursives
(autre post.)


merci
olivier




"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news: %
Case @OrderBy WHEN NULL THEN Field1 ELSE Null END

qu'il n'aime pas



Exact. Visiblement le message d'erreur indique que trier en utilisant une
valeur constante plutôt qu'un nom de champ n'est pas supporté ce qui est
confirmé si j'essaie par exemple :

select * from sys.databases order by NULL (qui donne donc le même
message).

Donc si le tri n'est pas défini, trier sur un champ par défaut comme la
clé primaire par exemple plutôt qu'en utilisant la constante NULL...








Avatar
Sylvain Lafontaine
C'est plutôt la façon de tester la valeur Null dans le Case qui est
incorrecte dans l'extrait de code d'Olivier.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Patrice" <http://scribe-fr.blogspot.com/> wrote in message
news:%
Case @OrderBy WHEN NULL THEN Field1 ELSE Null END

qu'il n'aime pas



Exact. Visiblement le message d'erreur indique que trier en utilisant une
valeur constante plutôt qu'un nom de champ n'est pas supporté ce qui est
confirmé si j'essaie par exemple :

select * from sys.databases order by NULL (qui donne donc le même
message).

Donc si le tri n'est pas défini, trier sur un champ par défaut comme la
clé primaire par exemple plutôt qu'en utilisant la constante NULL...




Avatar
Patrice
C'est plutôt la façon de tester la valeur Null dans le Case qui est
incorrecte dans l'extrait de code d'Olivier.



Mais même sans test, cela ne passe pas :

SELECT * FROM MaTable ORDER BY NULL donne le même message.

Je pense que cette possibilité fonctionnait peut-être précédemment mais a
été explicitement interdite par SQL Server 2005...

Vérification faite c'est bien le cas :

"Une colonne de tri peut inclure une expression ; cependant, lorsque la base
de données s'exécute en mode de compatibilité SQL Server 2005 (90), le
résultat de l'expression ne peut pas être une constante." tiré de :

http://msdn.microsoft.com/fr-fr/library/ms188385(v=SQL.90).aspx

--
Patrice
Avatar
Sylvain Lafontaine
SELECT * FROM MaTable ORDER BY NULL



Ce n'est pas la même chose ici car vous avez uniquement une constante ici.
Dans le cas du Case, ce n'est pas la même chose car le Case est une
expression associée à une ou plusieurs des colonnes.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Patrice" <http://scribe-fr.blogspot.com/> wrote in message
news:
C'est plutôt la façon de tester la valeur Null dans le Case qui est
incorrecte dans l'extrait de code d'Olivier.



Mais même sans test, cela ne passe pas :

SELECT * FROM MaTable ORDER BY NULL donne le même message.

Je pense que cette possibilité fonctionnait peut-être précédemment mais a
été explicitement interdite par SQL Server 2005...

Vérification faite c'est bien le cas :

"Une colonne de tri peut inclure une expression ; cependant, lorsque la
base de données s'exécute en mode de compatibilité SQL Server 2005 (90),
le résultat de l'expression ne peut pas être une constante." tiré de :

http://msdn.microsoft.com/fr-fr/library/ms188385(v=SQL.90).aspx

--
Patrice




Avatar
Patrice
Ce n'est pas la même chose ici car vous avez uniquement une constante ici.
Dans le cas du Case, ce n'est pas la même chose car le Case est une
expression associée à une ou plusieurs des colonnes.



Ok, mais le message d'erreur rencontré semble être le même (lorsque le case
retourne NULL au lieu d'indiquer un nom de colonne).

Enfin l'auteur original se manifestera à nouveau si besoin...

Bonne continuation...
Avatar
olivier
disons que je n'utilise plus de valeur NULL pour contourner le pb

merci
olivier



"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de news:

Ce n'est pas la même chose ici car vous avez uniquement une constante
ici. Dans le cas du Case, ce n'est pas la même chose car le Case est une
expression associée à une ou plusieurs des colonnes.



Ok, mais le message d'erreur rencontré semble être le même (lorsque le
case retourne NULL au lieu d'indiquer un nom de colonne).

Enfin l'auteur original se manifestera à nouveau si besoin...

Bonne continuation...



1 2