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

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!

--
La cuillère n'existe pas!
Configuration: Windows Vista FireFox 3.0.9

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. ba oui mais dans ce cas je vois le end de ton begin mais pas de ton if
    1. je suis oracle je connais pas sql server dsl
      1. Pas grave, merci d'avoir essayé :)
        De plus, les deux (Oracle et SQL Server) ne sont pas très différents ;)
    2. 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!
      1. 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.
        1. c'est quoi l'erreur
          1. "Syntaxe incorrecte vers le mot clé 'If'.
            Ligne 32 : syntaxe incorrecte vers ')'."

            Ligne 32 correspond à ma dernière ligne.