|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() marwa .netInscription : décembre 2009 Messages : 126 ![]() |
Bonjour,
Je suis débutante avec sql server et je voudrais créer la fonction suivante : Code :
Code :
je ne comprends pas d'où vient le problème Merci de m'aider |
||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Vous n'avez pas besoin de tous ces branchements ! Vous pouvez faire tout cela en une seule requete : Code sql :
En fait cette requête ne reflète pas exactement la logique de votre code car celui-ci ne traitait pas tous les cas... mais je pense qu'elle se rapproche plus de ce que vouliez faire : Filtrer sur les critères qui sont renseignés... (Par exemple dans votre code, si @adress est NULL, @type aussi mais pas @DESC, vous n'aurez aucun résultat car ce cas n'est pas traité ) Si vous voulez garder cette logique, vous pouvez modifier la requête en suivant le même principe : inclure les vérifications sur les variables dans le filtre de la requête |
||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() marwa .netInscription : décembre 2009 Messages : 126 ![]() |
Merci pour votre réponse mais la fonction que vous avez écrit retourne Null lorsque l'un des attributs @adress, @type ou @ desc est NULL.
Alors que ce que je veux faire c'est retourner des valeurs une fois les trois valeurs ne sont pas null , ou bien si l'une des valeurs @desc ou @adress est null mais pas @type qui dois toujours avoir une valeur. je veux savoir pourquoi les if ne marchent pas au sein de la fonction alors que lorsque je mets le bloc if dans une procédure ça marche. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Donc comme je disais, vous pouvez modifier le fonctionnement, en gardant le principe.
Dans votre cas, il faudra déjà sortir la vérification de nullité sur @Type de la parenthèse dans laquelle il se trouve, puisque vous voulez qu'il ne soit jamais null, et modifier les autres parties en fonction de votre besoin précis. pour ce qui est des IF, vous créez une fonction en ligne. Ce type de fonction accepte dans la clause RETURN uniquement une (et une seule) requête. Vous ne pouvez pas mettre des blocs d'instruction TSQL dans ce type de fonction comme vous le faites avec les IF Par contre, dans une requête, vous pouvez utiliser CASE, mais ici ce n'est pas nécessaire. Enfin si vous utilisez contains, assurez vous que les paramètres en entées de votre UDF soient bien formatés (avec les doubles quotes...) |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() marwa .netInscription : décembre 2009 Messages : 126 ![]() |
J'ai trouvé sur le lien suivant une explication pour aire fonctionenr If dans une fonction et ça a fonctionné avec moi.
je mets le lien pour ceux qui sont intéressés: http://social.msdn.microsoft.com/For...8-a264daf2d1b1 |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
il est en effet tout à fait possible de mettre du TSQL dans une fonction... mais pas dans une fonction en ligne
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com