Возвратный счет в хранимой процедуре - PullRequest
6 голосов
/ 28 февраля 2011

Я написал хранимую процедуру для возврата счетчика. Но я получил нулевое значение. Кто-нибудь может сказать мне, где проблема в моей хранимой процедуре.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[ValidateUser]
@UserName varchar(50),
@Password varchar(50),
@Num_of_User int output

AS 
BEGIN
  SET NOCOUNT ON;

  SELECT @Num_of_user =COUNT(*) 
    FROM login
   WHERE username = @UserName 
     AND pw = @Password

  RETURN

END

Ответы [ 6 ]

9 голосов
/ 28 февраля 2011

вы устанавливаете значение в переменную @num_of_user. добавить select @num_of_user после запроса

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[ValidateUser]
    @UserName varchar(50),
    @Password varchar(50),
    @Num_of_User int output

AS
BEGIN
    SET NOCOUNT ON;
     SELECT @Num_of_user =COUNT(*) 
         FROM login
         WHERE username=@UserName AND pw=@Password

     SELECT @Num_of_user
return
END
2 голосов
/ 28 февраля 2011

На самом деле он не возвращает счетчик, это выходной параметр.

Либо измените ваш sproc, чтобы он возвращал @num_of_user, либо проверьте выходной параметр вместо возвращаемого значения.

1 голос
/ 28 февраля 2011

Процедуры и функции на сервере SQL меня немного смущают, поскольку процедура также может возвращать значение.Однако вы можете добиться желаемого, удалив выходной параметр @Num_of_user и заменив

SELECT @Num_of_user =COUNT(*) 
    FROM login
   WHERE username = @UserName 
     AND pw = @Password

на

SELECT COUNT(*) 
    FROM login
   WHERE username = @UserName 
     AND pw = @Password

Последний оператор выбора всегда возвращается из PROCEDURE на SQL-сервере.

0 голосов
/ 30 апреля 2015

Возникла та же проблема, когда он возвращал ноль;попробуйте использовать круглые скобки:

SELECT @Num_of_user = ( COUNT(*) 
    FROM login
   WHERE username = @UserName 
     AND pw = @Password )
0 голосов
/ 28 декабря 2012

Просто еще один метод, но за пределами хранимой процедуры простой SELECT @@ROWCOUNT может работать, чтобы получить количество строк.

0 голосов
/ 28 февраля 2011

Тебе не нужен островок.Select count (*) всегда возвращает ненулевое значение.Вы даже можете выдать

select count(*) from anytable where 1=2 

, и вы получите 0, а не ноль.Я думаю, что ваша проблема приходит, когда вы исполняете SP.Возможно, вам не хватает ключевого слова output рядом с @Num_of_User.Ваш вызов должен выглядеть примерно так:

declare @outNum int 
exec ValidateUser 'some', 'wrong', @outNum output
print @outNum

Обратите внимание на ключевое слово output справа от параметра

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