【发布时间】:2018-04-03 23:21:56
【问题描述】:
我在 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:
SELECT @AccessTime = Hour
FROM Entries
WHERE DeptId = @DeptId
可能返回多于 1 行,比如说 2, 3, 4, .... , N 所以输出参数@intError 在这种情况下根据我的存储过程应该返回-1 但我不知道为什么,这种情况下的存储过程(当 select 返回超过 1 行时)在输出参数 @intError 中返回 0。为什么?
【问题讨论】:
-
不相关,但不能将 -1 分配给 tinyint 变量。您需要使用 smallint 或更大。
标签: c# sql-server sql-server-2008 stored-procedures sql-server-2008-r2