{SQL Server} Syntaxe incorrecte vers

Résolu/Fermé
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 - 19 oct. 2009 à 10:06
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 - 19 oct. 2009 à 17:24
Bonjour,

Comme le titre l'indique, j'ai une erreur de syntaxe vers le mot-clé "IF" dans le code suivant:

ALTER FUNCTION dbo.fnt_Usine

(
 @idUsine [int] = NULL,
 @sCode [char](2) = NULL
)
RETURNS TABLE
AS
IF ((@idUsine IS NULL) AND (@sCode IS NULL))
BEGIN
	RETURN (SELECT
	 [idUsine]
	,[sCode]
	,[sLibelle]

	FROM [dbo].[t_Usine])
END
ELSE
BEGIN
	RETURN (SELECT
	 [idUsine]
	,[sCode]
	,[sLibelle]

	FROM [dbo].[t_Usine]
	WHERE
		((@idUsine IS NULL) OR ([idUsine] = @idUsine))
		AND ((@sCode IS NULL) OR ([sCode] = @sCode)))
END


Le but de cette fonction est de retourner soit la table t_Usine en entier (si la fonction est appelée sans paramètres)
Soit de retourner une ligne unique correspondant à l'usine indiquée par l'un (ou les deux) des paramètres passés.

S'il vous plait, je ne vois pas mon erreur... J'ai beau tourner et retourner le probleme sous tous les sens, je ne comprends pas mon erreur.

Note : j'utilise l'éditeur de Microsoft Visual Studio 2008.

11 réponses

Socra!e Messages postés 439 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 6 février 2015 9
19 oct. 2009 à 15:37
c'est peut être bête mais a la place de BEGIN met THEN
0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
19 oct. 2009 à 15:40
Au point où j'en suis, je prend toute proposition.

Celle-ci ne fonctionne pas ("Syntaxe incorrecte vers "THEN" et vers "END" ")
0
Socra!e Messages postés 439 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 6 février 2015 9
19 oct. 2009 à 15:46
oublie de virgule quand tu crée fonction,
ou met un return 0 juste avant tes END??? ( je ne sais plus si en en langage C ou SQL ca ^^ met comme tu dis il faut tous tenter)
0
Socra!e Messages postés 439 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 6 février 2015 9
19 oct. 2009 à 15:49
enlève le END avant ELSE
0

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

Posez votre question
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
19 oct. 2009 à 15:51
C'est du C pour le Return 0

Parce que si je met "Return 0" avant mes END, il va me retourner "0", et non pas une table.
0
Socra!e Messages postés 439 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 6 février 2015 9
19 oct. 2009 à 15:54
essaie d'enlever le END avant else et test
0
blux Messages postés 25978 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
19 oct. 2009 à 15:59
Salut,

IS NULL ne se testerait pas avec la fonction ISNULL(valeur) ?
0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
19 oct. 2009 à 16:00
Syntaxe incorrecte vers IF, ELSE et END.

Et si j'enlève aussi le BEGIN après le ELSE... Syntaxe incorrecte vers IF et ELSE (ce qui est logique car on ne lui dit pas où s'arrêter après son IF.
0
Socra!e Messages postés 439 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 6 février 2015 9
19 oct. 2009 à 16:03
c'est ton AS j'en suis sur il doit manquer un truc
0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
19 oct. 2009 à 16:05
Je cherche, je cherche....

Je trouve pas pour le moment :S (je suis dessus depuis vendredi matin =/)
0
blux Messages postés 25978 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
19 oct. 2009 à 16:53
t'as essayé ce que je suggère en <7> ?
0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
19 oct. 2009 à 17:24
Blux : non.

En fait, je viens de résoudre le problème avec une collègue ;)

Voilà la sollution :

ALTER FUNCTION [fnt_Usine_2]
(
 @idUsine [int] = NULL,
 @sTagUsine [char](2) = NULL
)
RETURNS @Result TABLE(Id int NULL, tag char(2) NULL, libelle varchar(255) NULL)
AS
BEGIN

DECLARE @tempo table(Id int NULL, tag char(2) NULL, libelle varchar(255) NULL)

IF ((@idUsine IS NULL) AND (@sTagUsine IS NULL))
	INSERT INTO @tempo SELECT
	 [idUsine]
	,[sTagUsine]
	,[sLibelle]

	FROM [t_Usine]

ELSE
	INSERT INTO @tempo SELECT
	 [idUsine]
	,[sTagUsine]
	,[sLibelle]

	FROM [t_Usine]
	WHERE
		((@idUsine IS NULL) OR ([idUsine] = @idUsine))
		AND ((@sTagUsine IS NULL) OR ([sTagUsine] = @sTagUsine))
	
		INSERT INTO @Result
		SELECT * FROM @tempo
		
	RETURN
END

En fait, je déclare une table temporaire dans laquelle je met les résultats des Select, puis je met dans la table de retour...
Facile non? -_- 2 jours de boulot pour ça...
Résolu! Merci à vous.
0