|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Bonjour
Je tatonne toujours a chercher les bonnes syntaxe en procédure stockée. En C# j'aurais déja écrit ca de maniere tres simple mais j'aimerais quand meme essayer de maitriser la syntaxe en SP J'ai écrit la petite procedure suivante ca compile mais je ne sais pas si ca s'execute je pense que c'est vraiment mauvais comme maniere d'ecrire Plusieurs questions ; 1 Je n'ai pas du faire de bloc BEGIN END pour mon IF et mon ELSE c'est normal ? 2 Le ELSE est un cas particulier du IF si ChauffeurID a été défini, avez vous une suggestion pour mieux integrer cette situation sans reecrire toute la methode comme je l'ai fait ? Merci de m'aider pour mieux comprendre cette syntaxe (vraiment mal documentée )Code :
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() ![]() Hamid MIRAIngénieur développement logiciels Inscription : septembre 2003 Messages : 177 ![]() |
1 - Le BEGIN et le END pour le IF et le ELSE ne sont pas nécessaires, mais ils donnent de la clarté dans le code. Personnellement j'aurais pas pareil. Donc tu peux les garder !
2 - Le seul moyen que je connais, sous SQL Server, et qui permet de répondre à ce genre de situation, (c.à.d, ne pas réécrire plusieurs fois la mêmes requêtes avec des variantes légères), est le sql dynamique (EXECUTE sp_sqlexecute) voir le lien ci-dessous pour plus de détails: http://msdn.microsoft.com/en-us/library/ms188001.aspx 3 - Je te suggère, même si cela n'est pas obligatoire (a) de rajouter systématiquement un point virgule à la fin de chaque inscruction T-SQL. En effet cela fait partie de la norme ANSI SQL-2 Exemple : Code :
A+ |
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
merci hmira, je vais étudier cela !
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
00
|
|
|
#4 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Je ne voit pas pourquoi vous faîtes une procédure alors qu'une une seule requête tout va :
Code :
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Merci SqlPro
Effectivement ta requete est beaucoup plus elegante, c'est exactement ce que j'espérais et je vais l'utiliser dans ma procedure. (je vais aussi lire la doc pour comprendre l'usage de COALESCE Code :
SELECT DISTINCT COALESCE(@ChauffeurID, ChauffeurID) N.B.:J'utilise une procedure pour decharger l'application de l'appel de la requete L'application etant sur un device mobile connecté en WIFI, j'essaye de minimiser les dialogues entre le serveur et le device Cette procedure pourrait alors elle meme etre appellée par un Trigger
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Bonjour SqlPro
J'utilise souvent une petite astuce que tu n'avais pas repris dans ton exemple Dans le GROUP BY je fais Et dans le Select je fais Cela me permet de grouper toutes les operations d'un meme jour et de conserver la date de la derniere opération
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
Effectivement ISNUL() et COALESCE() remplissent une fonction (sans jeu de mots) similaire, à ceci près que : - ISNULL() ne prend que deux paramètres - COALESCE() en prend autant que vous voulez (je ne connais pas la limite Les deux fonctions retournent NULL si toutes les valeurs sont NULL. @++
__________________
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 |
|
00
|
|
|
#8 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Et COALESCE c'est la norme SQL. Vous le retrouverez donc sur tous les SGBDR alors que ISNULL (en un seul mot) est spécifique à SQL Server.
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Merci a tous !
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com