2011-10-26 5 views
0
ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](@ROLENAME VARCHAR(100), @STATUS BIT) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    IF(@ROLENAME IS NULL OR @STATUS IS NULL) 
    BEGIN 
     RETURN 0 
    END 
    ELSE 
    BEGIN 
     IF EXISTS (SELECT [RoleName], [Status] FROM ST_Roles 
        WHERE [RoleName] = @ROLENAME) 
     BEGIN 
      RETURN 0 
     END 
     ELSE IF(@ROLENAME IS NOT NULL) 
     BEGIN 
      INSERT INTO ST_Roles ([RoleName], [Status]) VALUES(@ROLENAME, @STATUS) 
      RETURN 1 
     END 
    END 
END 

Ce qui précède est mon proc stocké. Lorsque les valeurs NULL sont passées, elle doit renvoyer 0. Même lorsque 1 valeur est passée et qu'une autre valeur n'est pas transmise, elle doit renvoyer 0 au lieu d'insérer l'enregistrement.procédure stockée même après que la valeur nulle enregistre les données

Toute aide est vraiment appréciée.

+0

Pouvez-vous clarifier ce que vous voulez? pour le moment, il renvoie 0 si l'un est nul, que voulez-vous faire à la place? –

+0

quel est le problème? Essayez de mettre des valeurs par défaut pour les paramètres. – hgulyan

+0

Sur mon ordinateur, cela se comporte comme vous le décrivez. Peut-être que je ne comprends pas la question? Lorsque l'une ou l'autre des valeurs est 'null', elle renvoie' 0' et si 'RoleName' existe déjà, elle renvoie' 0'. Il renvoie '1' quand le' RoleName' est non-nul et le 'Status' est non-nul et le' RoleName' n'existe pas déjà. En quoi est-ce différent de ce que vous essayez d'accomplir? –

Répondre

0

Avant de décrire votre problème, je vais juste deviner. Je suppose que le problème est dans les paramètres par défaut. Peut-être que vous ne passez pas les paramètres ou vous passez une chaîne vide, alors essayez de cette façon

ALTER PROCEDURE [dbo].[STL_ADDNEWROLE](
       @ROLENAME VARCHAR(100) = NULL, 
       @STATUS BIT = NULL) 
     AS 
     BEGIN 
      SET NOCOUNT ON; 
      IF(ISNULL(@ROLENAME, '') = '' OR @STATUS IS NULL) 
       BEGIN 
        RETURN 0 
       END 
      ELSE 
       BEGIN 
        IF EXISTS (SELECT [RoleName],[Status] from ST_Roles where [RoleName] = @ROLENAME) 
         BEGIN 
          RETURN 0 
         END 
        ELSE IF(@ROLENAME IS NOT NULL) 
         BEGIN 
          INSERT INTO ST_Roles ([RoleName],[Status]) VALUES(@ROLENAME,@STATUS) 
          RETURN 1 
         END 
       END 


     END 
+0

ça marche bien maintenant. pouvez-vous me dire est-il obligatoire d'attribuer des valeurs comme vous l'avez fait ..? – Tan

+0

Seulement si vous avez des paramètres optionnels. Vérifiez les liens pour plus d'informations – hgulyan

+0

http://blog.tech-cats.com/2008/01/using-optional-parameters-in-sql-server.html http://geekswithblogs.net/whiletrue/archive/2009/ 02/28/paramètres-optionnels-dans-sql-stored-procedures.aspx – hgulyan

Questions connexes