[英]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.