Comment utiliser une instruction du cas scalaire une fonction en SQL?
Je veux obtenir une valeur d'une fonction en utilisant une instruction case.
J'ai essayé ce qui suit, mais il ne fonctionne pas:
CREATE FUNCTION [FATMS].[fnReturnByPeriod]
(
@Period INT
)
RETURNS int
AS
BEGIN
SELECT CASE @Period
when 1 then 1
when @Period >1 and @Period <=7 then 1
when @Period >7 and @Period <=30 then 1
when @Period >30 and @Period<=90 then 1
when @Period >90 and @Period <=180 then 1
when @Period >180 and @Period <=360 then 1
else 0
END
RETURN @Period
END
OriginalL'auteur HAJJAJ | 2011-02-21
Vous devez vous connecter pour publier un commentaire.
Il existe deux types de CAS de l'expression: simple et recherché. Vous devez choisir l'une ou de l'autre, vous ne pouvez pas utiliser un mélange de ces deux types dans une expression.
Essayez ceci:
Aussi, vous devez affecter le résultat de quelque chose comme d'autres l'ont déjà souligné.
OriginalL'auteur
Lorsque vous utilisez la touche RETOUR @Période, vous devez affecter une valeur à @Période. L'exemple suivant montre comment la structure de votre code, de sorte qu'il n'est pas nécessaire de déclarer une variable locale.
OriginalL'auteur
Déclarer une deuxième variable, puis définissez cette valeur car vous n'êtes pas la réinitialisation
@Period
.Par exemple:
Je l'ai laissé comme ça que je suis en supposant que vous allez changer vos valeurs pour chacun de ces
CASE
consolidés.OriginalL'auteur
Vous n'êtes pas l'attribution @Période de n'importe où. Essayez avec
when @Period >1 and @Period <=7 then SET @Period = 1
et par la suite pour toutes les autres lignes.SQL n'a pas de rendement implicite et donc vous devez toujours définir les variables avant de les retourner.
OriginalL'auteur
En quoi il "fonctionne pas"? Elle produit un message d'erreur lorsque vous essayez de l'exécuter? Est-il renvoyer un résultat inattendu?
Sur le dessus de ma tête, il y a plusieurs problèmes:
Votre cas instruction retourne
1
dans tous les cas.L'instruction de cas est également la combinaison de deux différents types de
CASE
sémantique:ou
La deuxième forme vous permet d'utiliser sans rapport avec les conditions, alors que la première ne peut vérifier pour différentes valeurs de
@Period
.Plus loin, vous êtes de retour la valeur de @Période, et non pas la valeur générée par l'instruction de CAS.
OriginalL'auteur
Voici un JEU basé sur l'approche à l'écriture de votre fonction dans SQL Server 2008
La façon dont vous avez écrit, tous les CAS branches retour 1, de sorte que vous pourriez aussi bien utiliser
OriginalL'auteur