将@@ rowcount分配给SQL Server存储过程中的变量

问题描述 投票:3回答:1

我在编写存储过程时遇到问题。如果select语句没有返回值,我想要返回-1的过程。但是,当select语句返回结果时,我想返回@@rowCount

当我运行存储过程时,它在没有结果时返回-1,但是当有结果时它返回1。

关于我需要改变什么的任何建议?

    -- Add the parameters for the stored procedure here
    @LoginName VARCHAR(25),
    @Password VARCHAR(10),
    @rowsAffected INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @PasswordSalt VARCHAR(36) 

    SELECT @PasswordSalt = (SELECT PasswordSalt FROM Employee WHERE LoginName = @LoginName)

    SELECT 
        Employee.ID, FirstName, LastName, LoginName, Email, StatusTypeID, 
        Description AS StatusDescription
    FROM
        Employee
    JOIN
        StatusType st ON Employee.StatusTypeID = st.ID
    WHERE
        LoginName = @LoginName 
        AND PasswordHash = HashBytes('SHA2_512', @Password + Cast(@PasswordSalt AS nvarchar(36))) 
        AND StatusTypeID = 1

    IF @@ROWCOUNT = 0
    BEGIN
        SET @rowsAffected = -1
    END
    ELSE
    BEGIN
        SELECT @rowsAffected = @@RowCount   
    END
END
sql sql-server stored-procedures
1个回答
4
投票

你的if语句可能正在重置@@rowcount

首先存储值,然后测试它:

select ...
from   ...

set @rowsAffected = @@rowcount
if @rowsAffected = 0
    set @rowsAffected = -1
© www.soinside.com 2019 - 2024. All rights reserved.