C# 返回意外值的SQL Server存储过程
我在SQL Server 2008中有一个从C#代码调用的存储过程: 我确信有一个案例选择: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
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或更大的值。