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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将@@ rowcount分配给SQL Server存储过程中的变量相关的知识,希望对你有一定的参考价值。

我在编写存储过程时遇到问题。如果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
答案

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

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

select ...
from   ...

set @rowsAffected = @@rowcount
if @rowsAffected = 0
    set @rowsAffected = -1

以上是关于将@@ rowcount分配给SQL Server存储过程中的变量的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中Rowcount与@@Rowcount的用法

SQL Server中Rowcount与@@Rowcount的用法

Oracle sql%rowcount 返回影响行数;sql server @@RowCount返回影响行数

SQL Server中Rowcount与@@Rowcount的用法

如何将插入的输出值分配给 sql server 中的变量? [复制]

为啥 SQL Server 不允许我启用混合身份验证模式,以便我可以使用 sa 用户将角色分配给其他用户?