繁体   English   中英

SQL Server存储过程返回意外值

[英]SQL Server Stored procedure returning an unexpected value

我在SQL Server 2008中具有从C#代码调用的存储过程:

CREATE PROCEDURE [dbo].[DepartmentStoreControlAccess]              
    @DeptId INT,             
    @intError tinyint OUTPUT,
AS
    SET @intError = 0

    SELECT @AccessTime = Hour
    FROM Entries
    WHERE DeptId = @DeptId

    IF @@ROWCOUNT = 1
    BEGIN
        -- DO STUFF and update @intError
    END
    ELSE
    BEGIN
        IF @@ROWCOUNT = 0   
            SET @intError = 0
        ELSE
            SET @intError = -1 
    END

我确定有一种情况可以确定选择:

SELECT @AccessTime = Hour
FROM Entries
WHERE DeptId = @DeptId

可能返回多于1行,比方说2、3、4,....,N,因此在这种情况下,根据我的存储过程,输出参数@intError应该返回-1,但我不知道为什么,存储过程在这种情况下(当select返回多于1行时)在输出参数@intError返回0。 为什么?

 DECLARE @Count INT
 SELECT @AccessTime=Hour
 FROM   Entries                                                                       
 WHERE  DeptId=@DeptId
 SET @Count = @@ROWCOUNT

并使用变量

返回受最后一条语句影响的行数。

第一次访问@@ROWCOUNT时,需要将其保存到变量中,因为@@ROWCOUNT 指向最后一条语句 在您的ELSE情况下, @@ROWCOUNT返回0,因为您的最后一条语句是IF语句中的@@ROWCOUNT

原因是检查@@ ROWCOUNT会重置@@ ROWCOUNT中的值

IF @@ROWCOUNT = 1   -- From this point @@ROWCOUNT = 0
BEGIN
    -- DO STUFF and update @intError
END
ELSE
BEGIN
    if @@ROWCOUNT = 0   -- So we always end up here
        set @intError = 0
    else
        set @intError = -1 
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM