2011-10-26 29 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 

上面是我的存儲過程。當傳遞NULL值時,它應該返回0.即使傳遞1個值並且另一個值未傳遞,它應該返回0而不是插入記錄。存儲過程即使在空值保存數據後

任何幫助真的很感激。

+0

你能說清楚你想要什麼嗎?目前它返回0,如果其中任何一個爲null,你希望它做什麼? –

+0

有什麼問題?嘗試將參數的默認值。 – hgulyan

+0

在我的電腦上,這個行爲就像你描述的那樣。也許我不理解這個問題?當任何一個值爲null時,它返回0,如果RoleName已經存在,它也返回0。當'RoleName'非空並且'Status'非空並且'RoleName'不存在時它返回'1'。這與你想要達到的目標有什麼不同? –

回答

0

在描述你的問題之前,我只能猜測。我想這個問題是在默認參數。也許你只是不通過參數或傳遞空字符串,所以試試這種方式

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

現在工作正常。你能告訴我是否必須爲你賦值? – Tan

+0

僅當您有可選參數時。檢查鏈接瞭解更多信息 – hgulyan

+0

http://blog.tech-cats.com/2008/01/using-optional-parameters-in-sql-server.html http://geekswithblogs.net/whiletrue/archive/2009/ 2月28日/可選參數-在-SQL存儲-procedures.aspx – hgulyan