Reputation: 36
I have a table that contains 3 columns USERID
, OLDPASSWORD
, NEWPASSWORD
.
I want to select OLDPASSWORD
and NEWPASSWORD
columns by USERID
and compare OLDPASSWORD
and NEWPASSWORD
, if there is an equality between NEWPASSWORD
and OLDPASSWORD
, It should return NEWPASSWORD
, otherwise it returns 0 (string);
Someting like this:
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
Thanks for your help.
Upvotes: 0
Views: 378
Reputation: 260
// 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
Upvotes: 0
Reputation: 2163
It is not possible, to return more than one value using return values, where as output parameters, can return any datatype and an sp can have more than one output parameters. I always prefer, using output parameters, over RETURN values.
In general, RETURN values are used to indicate success or failure of stored procedure, especially when we are dealing with nested stored procedures.Return a value of 0, indicates success, and any nonzero value indicates failure.
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
Upvotes: 0
Reputation: 1730
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
Upvotes: 0
Reputation: 35780
Return
keyword is not designed for returning values from table. Return
keyword is for returning from stored procedure and it can return only integer values. Here you can return some code result of executing your proc. You should directly do this with select
statement or by having some output parameter
:
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
Or:
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
Upvotes: 1
Reputation: 2624
You need something like that:
SELECT CASE WHEN OLDPASSWORD = NEWPASSWORD THEN '0'
ELSE NEWPASSWORD END AS Result
FROM PASSWORDINFO WHERE USERID = @USERID
Upvotes: 0
Reputation: 6557
Have you tried with this:
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
Upvotes: 0