计数查询在存储过程中不起作用

时间:2014-01-29 06:37:13

标签: sql sql-server sql-server-2008 tsql stored-procedures

我试图选择select语句返回的行数,但是它返回0,否则如果我运行简单计数查询,则返回没有找到的记录为什么SP不能为我工作???

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

    CREATE PROCEDURE GetUser_Pwd
      @EmplID char,
      @EmplPwd varchar(50)

    As  
    BEGIN

        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        -- Insert statements for procedure here
        Declare @No_Rows int
        Select No_Rows= count(*) from HrEmployee where EmplID = @EmplID AND PassWord = @EmplPwd
        Return @No_Rows
    END
    GO

此返回0,

Exec GetUser_Pwd 1, 1234

返回1

select count(*) from HrEmployee where EmplID = 1 AND PassWord = 1234

3 个答案:

答案 0 :(得分:1)

而不是RETURN @No_RowsSELECT @No_Rows

RETURN 语句用于函数。 对于存储过程,如果使用 OUTPUT 参数,则使用 RETURN 语句。

Read here关于如何从存储过程中检索结果

    Declare @No_Rows int
    Select @No_Rows= count(*) from HrEmployee where EmplID = @EmplID AND PassWord = @EmplPwd
    Select @No_Rows

答案 1 :(得分:1)

您需要声明一个OUTPUT变量。试试这个:

CREATE PROCEDURE GetUser_Pwd
  @EmplID char,
  @EmplPwd varchar(50),
  @No_Rows int OUTPUT

As  
BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Select @No_Rows= count(*) 
    from HrEmployee 
    where EmplID = @EmplID AND PassWord = @EmplPwd
    RETURN
END
GO

现在,使用以下命令调用过程

-- Declare the variable to receive the output value of the procedure.
DECLARE @No_Rows int;
-- Execute the procedure and save the output value in the variable @No_Rows
EXECUTE GetUser_Pwd @EmpId = '1',@EmplPwd='1234',@No_Rows=@No_Rows OUTPUT;
-- Display the value returned by the procedure.
PRINT 'Number of rows matching the criteria is ' + 
    convert(varchar(10),@No_Rows);
GO

答案 2 :(得分:0)

创建程序GetUser_Pwd   @EmplID char,   @EmplPwd varchar(50)

作为
BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
Declare @No_Rows int
Select @No_Rows= count(*) from HrEmployee where EmplID = @EmplID AND PassWord = @EmplPwd
Return @No_Rows

END 走 / 呼叫...... / DECLARE @x INT EXEC @x = GetUser_Pwd @ EmplID = 1,@ EmplPwd = 1 SELECT @x