存储过程结果中的问题

kam*_*001 0 sql-server stored-procedures

我有这样的商店程序:

ALTER PROCEDURE [dbo].[CheckUser&Pass]
(
    @Username nchar(15),
    @Password nchar(15)
)
AS
    SET NOCOUNT ON;
SELECT        Username, Pass, Code_Person
FROM            Login
WHERE        (Username = @Username) AND (Pass = @Password)
Run Code Online (Sandbox Code Playgroud)

并执行:

DECLARE @return_value int

EXEC    @return_value = [dbo].[CheckUser&Pass]
        @Username = N'admin',
        @Password = N'1234'

SELECT  'Return Value' = @return_value

GO
Run Code Online (Sandbox Code Playgroud)

我想知道如果用户名是admin并且密码是1234,我可以将@return_Value设置为1.

但它不能正常工作,这可能吗?

Ada*_*Dev 5

要在存储过程中设置返回值,需要使用RETURN语句

例如

IF (@@ROWCOUNT > 0 AND @Username = 'admin' and password='1234')
    RETURN 1
ELSE
    RETURN 0
Run Code Online (Sandbox Code Playgroud)

请注意,我已经准确地给出了您要求使用RETURN语句的要求.我应该指出一些问题:

  1. 看起来你是用纯文本存储密码,如果是这样的话,这是一个坏主意
  2. 管理员用户名和密码组合的这种硬编码条件非常糟糕.一个更好的解决方案是在数据库中有一个"IsAdmin"标志 - 如果提供的用户名/密码有效,则如果该标志表明该帐户是管理员,则返回1.
  3. 使用nchar - 所有用户名和密码将填充为15个字符.您应该考虑使用nvarchar.