2010-09-30 3 views

Répondre

4

Il semble que quiconque a écrit que la procédure stockée l'utilise comme une valeur de retour pour indiquer le succès ou l'échec.

Si vous effectuez cette opération, une seule ligne avec une seule colonne sera renvoyée pour chaque appel à la procédure.

La bonne façon de gérer cela serait d'utiliser réellement la valeur de retour de la procédure stockée, plutôt que de retourner la seule ligne de colonne unique:

BEGIN 
    IF EXISTS(SELECT * FORM Table1 WHERE ID = @ID) 
    BEGIN 
     UPDATE Table1 SET Name = @Name WHERE ID = @ID 
     RETURN 1 
    END 

    RETURN 0 
END 
+0

donc 1 et 0 sont des valeurs de retour ?? Pourquoi "RETURN 1" n'est-il pas utilisé à la place? – Serenity

+0

@Happy Soul - Je me demande la même chose. Ça aurait pu être quelqu'un qui ne connaissait pas RETURN. –

+0

SELECT '1' a 1 dans les guillemets simples, donc cela signifie que c'est une valeur seulement et non pas la colonne. ou quelque chose? – Serenity

0

On peut supposer que certains contrôles de code appelant cette valeur pour déterminer si un rangée a été mis à jour ou non. Plutôt que de vérifier et de mettre à jour (deux accès à la table), vous pouvez tout aussi bien le faire.

UPDATE Table1 SET [email protected] WHERE [email protected]  
SELECT CASE WHEN @@Rowcount = 0 THEN 0 ELSE 1 END 

Si id est le PK alors vous pouvez juste faire

UPDATE Table1 SET [email protected] WHERE [email protected]  
SELECT @@Rowcount 

Notez aussi longtemps que SET NOCOUNT est pas alors le nombre de lignes affectées sera passé à l'application client de toute façon.

0

Sélectionnez '1' pour indiquer que Table1 contient la valeur d'identifiant @ID (un paramètre) a été mis à jour. Select '0' indique que Table1 ne contient pas la valeur d'identifiant @ID.

3

L'IF EXISTS vérifie s'il y a une ligne dans Table1 avec l'ID donné. S'il y a une ligne, elle mettra à jour cette ligne avec le nom donné. Le Select "1" retournera "1" et Select "0" renvoie "0". Le "1" ou "0" indiquerait si la ligne a été trouvée ou non.

+0

ok ... merci .... – Serenity