procédure stockée avec if else sql server 2008
J'ai 3 tables, je dois vérifier si les grands-parents de la table id a des dossiers dans les petits-enfants de la table. Si oui, de retour oui, else return no. Voici ma procédure stockée. J'ai eu une mauvaise erreur de syntaxe. Je suis nouvelle procédure stockée. S'il vous plaît aider moi.
CREATE PROCEDURE P_Check
@PKG_ID INT,
@S_ID INT,
@FLAG VCHAR(10) OUT
DECLARE IDS CURSOR LOCAL FOR SELECT S_ID FROM T1 WHERE P_ID = @PKG_ID
OPEN IDS
FETCH NEXT FROM IDS into @S_ID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT * FROM T2 WHERE S_ID = @S_ID
IF @@ROWCOUNT<>0
@FLAG = 'YES'
RETURN
ELSE
@FLAG = 'NO'
FETCH NEXT FROM IDS into @S_ID
END
CLOSE IDS
DEALLOCATE IDS
OriginalL'auteur jhon smith | 2013-04-11
Vous devez vous connecter pour publier un commentaire.
Quelques points à vérifier:
vchar
type de données dans SQL Server, sauf si c'est votre type personnalisé. Donc le changer pourvarchar
AS
if
entrebegin
etend
Votre code peut être compilé:
Cependant, je pense que votre curseur ne sera pas fermé comme vous êtes de retour ici
IF @@ROWCOUNT<>0
. Je pense que ce que vous avez à faire est de changer cela::
puis à la fin de votre procédure comme ceci:
Alors pour répondre à votre question dans les commentaires, vous êtes "le retour" déjà dans un sens. Vous pouvez appeler et de tester votre procédure est comme ceci:
Vous êtes les bienvenus. Voir ma réponse mis à jour.
Est la même pouvez obtenir par le biais de juste une jointure entre t1 et t2 par correspondance S_ID?
Je vous suggère d'aller avec @marc_s de réponse. Votre question était à l'origine une erreur de syntaxe, et de l'optimisation, c'est autre chose. Marc_s réponse est une bonne alternative.
OriginalL'auteur von v.
C'est juste trop compliqué et à l'aide d'un curseur ici est totalement inutile et totalement inutile.
Simplifier votre procédure:
Lorsque l'on travaille sérieusement avec SQL Server, vous avez besoin de sortir de la procédure ligne-par-atroce-ligne la pensée de l'utilisation de curseurs et de boucles, et vous avez besoin pour commencer de la pensée dans des ensembles pour être efficace et productif.
OriginalL'auteur marc_s