OVH Cloud OVH Cloud

If ou Case dans un WHERE

2 réponses
Avatar
Marianne
Bonjour, voici mon problème...
J'ai besoin de savoir si mon parametre passé à ma store procédure est vide
ou non afin d'accélérer le procéssus. J'ai donc essayé un CASE

WHERE

(IR65ALIN.[Order #] IN
(CASE @Ref
WHEN null THEN

(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE '%' OR IR65ALIN.[JC Job #] is null)

ELSE
(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE @Ref)
END))

Je n'ai pas de message d'erreur, mais ça ne retourne rien dutout...

J'ai aussi essayé un IF

(IF @Ref ='%'
begin

(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[[JC Job #]] LIKE '%')
end
ELSE
begin
(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE @Ref)
end))

Là, j'ai des messages d'erreur:
- Incorrect syntax near the keyword 'IF'.
- Incorrect syntax near the keyword 'FROM'.

Pouvez vous me dire ce que je fais de pas correct SVP.
Merci infiniement...
Marianne

2 réponses

Avatar
Sylvain Lafontaine
Case est une fonction, elle ne peut donc retourner qu'une seule valeur à la
fois. Pour le premier cas, vous devez donc mettre un TOP 1 dans vos
sous-requêtes Select (ou utiliser une fonction UDF?)

Dans le deuxième cas, vous avez mis des crochets en double: [[ et ]] . Il
est également inutile de tester pour « IR65ALIN.[[JC Job #]] LIKE '%' » car
cette condition sera toujours vrai sauf pour les cas où [JC Job #] est null

Normalement, il est plus facile d'écrire quelque chose du genre:

... Where (@Ref is Null) or (IR65ALIN.[JC Job #] LIKE @Ref)

ou encore:

if (@ref is null) @ref = '%'

... Where (IR65ALIN.[JC Job #] LIKE @Ref)

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Marianne" wrote in message
news:
Bonjour, voici mon problème...
J'ai besoin de savoir si mon parametre passé à ma store procédure est vide
ou non afin d'accélérer le procéssus. J'ai donc essayé un CASE

WHERE

(IR65ALIN.[Order #] IN
(CASE @Ref
WHEN null THEN

(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE '%' OR IR65ALIN.[JC Job #] is null)

ELSE
(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE @Ref)
END))

Je n'ai pas de message d'erreur, mais ça ne retourne rien dutout...

J'ai aussi essayé un IF

(IF @Ref ='%'
begin

(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[[JC Job #]] LIKE '%')
end
ELSE
begin
(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE @Ref)
end))

Là, j'ai des messages d'erreur:
- Incorrect syntax near the keyword 'IF'.
- Incorrect syntax near the keyword 'FROM'.

Pouvez vous me dire ce que je fais de pas correct SVP.
Merci infiniement...
Marianne



Avatar
Fred BROUARD
J'ai du mal à comprendre ce que vous voulez faire, mais il me semble que
l'écriture de votre requête serait grandement simplifiée si vous utilisiez les
fontions COALESCE ou NULLIF.

Pouvez vous mettre le texte complet de votre requête et la sémanytique associée ?

A +

Marianne a écrit:
Bonjour, voici mon problème...
J'ai besoin de savoir si mon parametre passé à ma store procédure est vide
ou non afin d'accélérer le procéssus. J'ai donc essayé un CASE

WHERE

(IR65ALIN.[Order #] IN
(CASE @Ref
WHEN null THEN

(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE '%' OR IR65ALIN.[JC Job #] is null)

ELSE
(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE @Ref)
END))

Je n'ai pas de message d'erreur, mais ça ne retourne rien dutout...

J'ai aussi essayé un IF

(IF @Ref ='%'
begin

(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[[JC Job #]] LIKE '%')
end
ELSE
begin
(SELECT [Order #]
FROM IR65ALIN
WHERE IR65ALIN.[JC Job #] LIKE @Ref)
end))

Là, j'ai des messages d'erreur:
- Incorrect syntax near the keyword 'IF'.
- Incorrect syntax near the keyword 'FROM'.

Pouvez vous me dire ce que je fais de pas correct SVP.
Merci infiniement...
Marianne




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************