C# 返回意外值的SQL Server存储过程

C# 返回意外值的SQL Server存储过程,c#,sql-server,sql-server-2008,stored-procedures,sql-server-2008-r2,C#,Sql Server,Sql Server 2008,Stored Procedures,Sql Server 2008 R2,我在SQL Server 2008中有一个从C#代码调用的存储过程: 我确信有一个案例选择: SELECT @AccessTime = Hour FROM Entries WHERE DeptId = @DeptId 可以返回超过1行,例如2、3、4,N因此,根据我的存储过程,在这种情况下,输出参数@intError应该返回到-1,但我不知道为什么,在这种情况下(当select返回超过1行时),存储过程在输出参数@intError中返回0。为什么? DECLARE @Count INT S

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

我确信有一个案例选择:

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,因为您的上一条语句是
@@ROWCOUNT
IF语句中的
@@ROWCOUNT
语句。

您第一次访问它时需要将
@@ROWCOUNT
保存到一个变量中,因为
@@ROWCOUNT
。在您的
ELSE
案例中,
@@ROWCOUNT
返回0,因为您的上一条语句是
@@ROWCOUNT
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

原因是检查@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

不相关,但不能将-1赋给tinyint变量。您需要使用smallint或更大的.Unrelated,但不能将-1赋值给tinyint变量。您需要使用smallint或更大的值。