Проблема в результате хранимой процедуры - PullRequest
0 голосов
/ 26 января 2010

У меня есть такая процедура хранения:

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)

И Исполнение:

DECLARE @return_value int

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

SELECT  'Return Value' = @return_value

GO

Я хочу знать, как установить @return_Value в 1, если имя пользователя - admin, а пароль - 1234.

но это не работает должным образом, это возможно?

Ответы [ 3 ]

5 голосов
/ 26 января 2010

Чтобы установить возвращаемое значение в хранимой процедуре, вам нужно использовать оператор RETURN

, например

IF (@@ROWCOUNT > 0 AND @Username = 'admin' and password='1234')
    RETURN 1
ELSE
    RETURN 0

Обратите внимание, я дал именно то, о чем вы просили, просто чтобы продемонстрировать использование оператора RETURN. У меня есть несколько проблем, на которые следует обратить внимание:

  1. Похоже, что вы храните пароль в виде обычного текста, что в случае плохой идеи
  2. Это жестко закодированное условие для комбинации имени пользователя и пароля администратора ужасно. Одним из лучших решений является наличие флага «IsAdmin» в БД - если введенные имя пользователя и пароль действительны, тогда верните 1, если флаг указывает, что учетная запись является администратором.
  3. Использование nchar - все имена пользователей и пароли будут дополнены до 15 символов. Вы должны рассмотреть nvarchar вместо этого.
1 голос
/ 26 января 2010

Вы можете изменить свой сохраненный процесс, чтобы он возвращал счетчик, при условии, что имя пользователя и пароль уникальны, вы должны получить 1 или 0 для результата, но я считаю, что должен быть лучший способ.

ALTER PROCEDURE [dbo].[CheckUser&Pass]
(
    @Username nchar(15),
    @Password nchar(15)
)
AS
    SET NOCOUNT ON;
SELECT        Count(Username)
FROM            Login
WHERE        (Username = @Username) AND (Pass = @Password)
0 голосов
/ 26 января 2010

Вы должны изменить свою хранимую процедуру, чтобы вернуть желаемое значение

ALTER PROCEDURE [dbo].[CheckUser&Pass]
(
    @Username nchar(15),
    @Password nchar(15)
)
AS
    SET NOCOUNT ON;
    DECLARE @cnt INT
    SELECT        @cnt = COUNT(*)
    FROM            Login
    WHERE        (Username = @Username) AND (Pass = @Password)

    RETURN @cnt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...