2015-07-10 106 views
0

我有一個表,其中包含3列USERID,OLDPASSWORD,NEWPASSWORD通過比較2個字段的存儲過程返回值

我想USERID選擇OLDPASSWORDNEWPASSWORD列和比較OLDPASSWORDNEWPASSWORD,如果有NEWPASSWORDOLDPASSWORD之間的平等,它應該返回NEWPASSWORD,否則返回0(串);

成才這樣的:

ALTER PROCEDURE [dbo].[GET_PASSWORD] 
(
    @USERID NVARCHAR(50) 
) 
AS 
    SELECT OLDPASSWORD, NEWPASSWORD 
    FROM PASSWORDINFO 
    WHERE USERID = @USERID 

    IF OLDPASSWORD == NEWPASSWORD 
     RETURN "0" 
    ELSE 
     RETURN NEWPASSWORD 

感謝您的幫助。

+0

您是否嘗試過使用的情況下發言? – PKirby

+0

@Robert Harvey我認爲他想比較舊密碼和新密碼,並返回compariosn結果。 –

回答

0

您是否嘗試過與此:

ALTER PROCEDURE [dbo].[GET_PASSWORD] 
(
    @USERID NVARCHAR(50) 
) 
AS 
BEGIN 

    SELECT 
     CASE 
      WHEN OLDPASSWORD = NEWPASSWORD THEN '0' 
      ELSE NEWPASSWORD 
     END 
    FROM PASSWORDINFO 
    WHERE USERID = @USERID 

END 
0

你需要類似的東西:

SELECT CASE WHEN OLDPASSWORD = NEWPASSWORD THEN '0' 
    ELSE NEWPASSWORD END AS Result 
    FROM PASSWORDINFO WHERE USERID = @USERID 
1

Return關鍵字並非設計用於從表中返回值。 Return關鍵字用於從存儲過程返回,它只能返回整數值。在這裏你可以返回執行你的proc的代碼結果。

ALTER PROCEDURE [dbo].[GET_PASSWORD] @USERID NVARCHAR(50) 
AS 
    BEGIN 
     SELECT CASE WHEN OLDPASSWORD = NEWPASSWORD THEN '0' 
        ELSE NEWPASSWORD 
       END AS CurrentPassword 
     FROM PASSWORDINFO 
     WHERE USERID = @USERID 
    END 

或者:你應該直接與select陳述或者有一些output parameter做到這一點

ALTER PROCEDURE [dbo].[GET_PASSWORD] 
    @USERID NVARCHAR(50) , 
    @CurrentPassword NVARCHAR(50) OUTPUT 
AS 
    BEGIN 
     SELECT @CurrentPassword = CASE WHEN OLDPASSWORD = NEWPASSWORD 
             THEN '0' 
             ELSE NEWPASSWORD 
            END 
     FROM PASSWORDINFO 
     WHERE USERID = @USERID 
    END 
+0

這是更有效的解決方案。更少的代碼,做更多。 :) 謝謝! – erhanzeyrek

0
ALTER PROCEDURE [dbo].[GET_PASSWORD] (@USERID NVARCHAR(50), @result VARCHAR(10) OUTPUT) 
AS 
BEGIN 
    SELECT @result = CASE 
      WHEN OLDPASSWORD = NEWPASSWORD 
       THEN '1' 
      ELSE '0' 
      END 
    FROM PASSWORDINFO 
    WHERE UserId = @USERID 
END 
0

這是不可能的,返回使用返回值,其中多於一個值輸出參數,可以返回任何數據類型,並且sp可以有多個輸出參數。我總是喜歡使用輸出參數,而不是RETURN值。

通常,RETURN值用於指示存儲過程的成功或失敗,特別是當我們處理嵌套存儲過程時。返回值爲0,表示成功,任何非零值表示失敗。

ALTER PROCEDURE [dbo].[GET_PASSWORD] 
    @USERID NVARCHAR(50) , 
    @Password NVARCHAR(50) OUTPUT 
AS 
    BEGIN 
     SELECT @Password = CASE WHEN OLDPASSWORD = NEWPASSWORD 
           THEN '0' 
            ELSE NEWPASSWORD 
           END 
     FROM PASSWORDINFO 
     WHERE USERID = @USERID 
    END 
1
// try this 
ALTER PROCEDURE [dbo].[GET_PASSWORD] 
(
    @USERID NVARCHAR(50) 
) 
AS 
    declare @NewPassword NVARCHAR(50) 
    declare @OldPassword NVARCHAR(50) 

    SELECT @OldPassword =OLDPASSWORD, @NewPassword = NEWPASSWORD 
    FROM PASSWORDINFO 
    WHERE USERID = @USERID  

    IF @OldPassword = @NewPassword 
     RETURN "0" 
    ELSE 
     RETURN @NewPassword