Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 19h06   #1
Invité régulier
 
Inscription : décembre 2006
Messages : 21
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2006
Messages : 21
Points : 6
Points : 6
Envoyer un message via MSN à Terryio
Par défaut [ProcStoc] Ne trouve pas la façon de faire

Bonjour,

j'aurais besoin d'aide pour analyser cet algorithme (pour que ce soit plus simple à comprendre, enfin j'espère ) que je vous soumet car les différentes manières que j'ai tenté d'utiliser n'ont pas fonctionnées...

Cet algorithme se situe dans la partie WHERE d'une procédure stockée sous SQL Server 2005.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SI @param1 DIFFÉRENT DE 0 ALORS
    SI @param2 ÉGAL 0 ALORS
	[colonne] ÉGAL 200 OU 201
    SINON [colonne] ÉGAL 200 OU 201 OU 202
    FIN SI
SINON
    SI @param2 ÉGAL 0 ALORS
	[colonne] ÉGAL @param1
    SINON [colonne] ÉGAL @param1 OU 202
    FIN SI
FIN SI
J'espère que vous pourrez m'aider vu que nous n'avons pas d'expert en Transact-SQL ici...
Merci
Terryio est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/12/2010, 21h00   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 517
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 517
Points : 3 960
Points : 3 960
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SI @param1 DIFFÉRENT DE 0 ALORS
    SI @param2 ÉGAL 0 ALORS
	[colonne] ÉGAL 200 OU 201
    SINON [colonne] ÉGAL 200 OU 201 OU 202
    FIN SI
SINON
    SI @param2 ÉGAL 0 ALORS
	[colonne] ÉGAL @param1
    SINON [colonne] ÉGAL @param1 OU 202
    FIN SI
FIN SI
Ce n'est pas du transac-SQL, c'est un algorithme écrit "symboliquement".
Tel quel, en SQL ou T-SQL, ça ne doit pas donner grand chose!!!
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 23h46   #3
Membre du Club
 
Homme
Consultant en Business Intelligence
Inscription : mai 2005
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2005
Messages : 34
Points : 41
Points : 41
Envoyer un message via MSN à soufir
Hello,
Je ne mettrais pas cet algo dans "la partie WHERE d'une procédure stockée" mais plutot dans la partie SELECT d'une requete. Pour cela tu devras utiliser l'instruction CASE de SQL Server. Plus d'info sur
http://msdn.microsoft.com/fr-fr/library/ms181765.aspx
soufir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 02h42   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 517
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 517
Points : 3 960
Points : 3 960
Ok c'est un algo à traduire en T-sql...
Bonne chance pour mettre dans l'algo cette ligne
Code :
SINON [colonne] ÉGAL 200 OU 201 OU 202
On laisse la bd chosir la valeur?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 09h24   #5
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Sauf si c'est effectivement une clause WHERE comme dit dans la question...
ce qui donnerai quelque chose du genre :


Code :
1
2
3
4
5
WHERE
@Param1 != 0 AND (
             [Colonne] IN (200,201) OR (@Param2!=0 AND [Colonne] = 202) )OR 
      @Param1 = 0 AND ( [colonne] = @Param1 
OR (@Param2 != 0 AND [colonne] = 202))

a tester quand meme, et peut etre a optimiser...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 09h39   #6
Invité régulier
 
Inscription : décembre 2006
Messages : 21
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2006
Messages : 21
Points : 6
Points : 6
Envoyer un message via MSN à Terryio
Merci pour vos réponses,

j'avais déjà essayé la méthode par CASE hier mais sans succès...
Cependant, je viens de m'apercevoir qu'il doit y avoir une erreur de syntaxe dans ma PS. Ci-dessous le code :

Je ne crois pas que le séparateur à utiliser soit bien |

Citation:
[Colonne] =
CASE @param1
WHEN 0 THEN
CASE @param2
WHEN 0 THEN (200|201)
ELSE (200|201|202)
END
ELSE
CASE @param2
WHEN 0 THEN (@param1)
ELSE (@param1|202)
END
END
Je cherche cette réponse en parallèles.
Terryio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 02h16   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 662
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 662
Points : 8 693
Points : 8 693
Bonjour,

Comme vous l'a dit 7gyY9w1ZY6ySRgPeaefZ, vous ne pouvez pas laisser décider à la procédure stockée la valeur que va prendre votre colonne : 200 OR 201 OR ...

L'opérateur | permet d'effectuer des calculs en binaire.

Dites-nous plus précisément ce que vous souhaitez faire et dans quelle situation vous vous trouvez, et donnez le code complet de votre procédure.
Sans cela il sera difficile de vous aider.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h17.


 
 
 
 
Partenaires

Hébergement Web