{SQL} Return, IF... ELSE...??

feadin91 Messages postés 282 Statut Membre -  
feadin91 Messages postés 282 Statut Membre -
Bonjour,

J'ai une application en C#, .net 1.1, avec gestion d'une base de données. Dans celle-ci, je dois créer une fonction qui retourne une table, ou une seule ligne, en fonction de la présence ou non de paramètres...

J'utilise l'éditeur Visual Studio 2008 (personne n'est parfait ;) )

Pour le moment j'ai :

ALTER FUNCTION dbo.fnt_Usine

(
 @idUsine [int] = Null,
 @sCode [char](2) = Null
)
Returns Table
As
Return
(
If((@idUsine Is Null) And (@sCode Is Null))
Begin
	Select
	 [idUsine]
	,[sCode]
	,[sLibelle]

	From [dbo].[t_Usine]
End
Else
Begin
	Select
	 [idUsine]
	,[sCode]
	,[sLibelle]

	From [dbo].[t_Usine]
	Where
		((@idUsine Is Null) Or ([idUsine] = @idUsine))
		And ((@sCode Is Null) Or ([sCode] = @sCode))
End
)


Sauf que à priori ma syntaxe n'est pas la bonne...
Lorsque je veux sauvegarder la modification, VS2008 m'indique que la syntaxe n'est pas bonne vers 'If'
et vers ')'...

J'ai beau essayer toutes les modifications possibles, je ne vois pas comment faire...

Please Help!

8 réponses

Profil bloqué
 
il est ou ton END IF?
0
feadin91 Messages postés 282 Statut Membre 89
 
Pour SQL Server 2008, il n'y a pas de END IF. Juste END (enfin il me semble...) Je vais tester ça de suite.

-> Je confirme. En SQL Server, c'est
IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ]

(source : msdn library https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15 )
0
Profil bloqué
 
ba oui mais dans ce cas je vois le end de ton begin mais pas de ton if
0
Profil bloqué
 
je suis oracle je connais pas sql server dsl
0
feadin91 Messages postés 282 Statut Membre 89
 
Pas grave, merci d'avoir essayé :)
De plus, les deux (Oracle et SQL Server) ne sont pas très différents ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
feadin91 Messages postés 282 Statut Membre 89
 
Il n'y en a pas.
La fin du IF est déterminée par le ELSE...
Regarde cet exemple (toujours sur MSDN) :

DECLARE @AvgWeight decimal(8,2), @BikeCount int
IF 
(SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5
BEGIN
   SET @BikeCount = 
        (SELECT COUNT(*) 
         FROM Production.Product 
         WHERE Name LIKE 'Touring-3000%')
   SET @AvgWeight = 
        (SELECT AVG(Weight) 
         FROM Production.Product 
         WHERE Name LIKE 'Touring-3000%')
   PRINT 'There are ' + CAST(@BikeCount AS varchar(3)) + ' Touring-3000 bikes.'
   PRINT 'The average weight of the top 5 Touring-3000 bikes is ' + CAST(@AvgWeight AS varchar(8)) + '.'
END
ELSE 
BEGIN
SET @AvgWeight = 
        (SELECT AVG(Weight)
         FROM Production.Product 
         WHERE Name LIKE 'Touring-3000%' )
   PRINT 'Average weight of the Touring-3000 bikes is ' + CAST(@AvgWeight AS varchar(8)) + '.' 
END ;
--
La cuillère n'existe pas!
0
Profil bloqué
 
ok ba dans ton exemple y'a un ; et pas toi
0
feadin91 Messages postés 282 Statut Membre 89
 
Bien vu!
J'essaye.

-> Cela ne change rien. Que je place des ; à la fin des blocs SQL (BEGIN ... END) ou après la ) de fin du RETURN, cela me met la même erreur.
0
Profil bloqué
 
c'est quoi l'erreur
0
feadin91 Messages postés 282 Statut Membre 89
 
"Syntaxe incorrecte vers le mot clé 'If'.
Ligne 32 : syntaxe incorrecte vers ')'."

Ligne 32 correspond à ma dernière ligne.
0