【发布时间】:2014-08-23 02:15:51
【问题描述】:
我正在使用 AdventureWorks ( Sql server 2005 express) 并想通过以下 SP 了解哪个性别的休假时间最长。 SP 编译良好,但执行时未显示任何结果
这里是sp
create proc GenderLeaveCount
as
begin
declare @gender nchar(1)
declare @leaveHours smallint
declare @totalHoursMale int
declare @totalHoursFemale int
declare genderLeave Cursor
for select Gender , SickLeaveHours
from HumanResources.Employee
where SickLeaveHours is not null and Gender is not null
open genderLeave
fetch next from genderLeave
into @gender,@leaveHours
while @@fetch_status=0
Begin
IF @gender = N'M'
Set @totalHoursMale = @totalHoursMale + @leaveHours
ELSE
Set @totalHoursFemale = @totalHoursFemale + @leaveHours
fetch next from genderLeave
into @gender,@leaveHours
End
close genderLeave
deallocate genderLeave
IF @totalHoursMale > @totalHoursFemale
Select 'Male leave hours are higher:' + cast(@totalHoursMale as varchar(20))as result
IF @totalHoursMale < @totalHoursFemale
Select 'Male leave hours are higher:' + cast(@totalHoursMale as varchar(20))as result
IF @totalHoursMale = @totalHoursFemale
Select 'Male leave hours are higher:' + cast(@totalHoursMale as varchar(20)) as result
end
go
exec GenderLeaveCount
谁能告诉我问题是什么以及如何解决它..
【问题讨论】:
-
您需要使
@totalHoursMale和@totalHoursFemale等于0。这不是VBScript,其中未初始化的变量在稍后被引用时通过魔术设置为0。现在您正在添加等于NULL的NULL + @leaveHours,所以没有什么要打印的,因为当您将NULL连接到您的字符串时,这也会产生NULL。无论如何,只是SELECT Gender, SUM(LeaveHours) ... GROUP BY Gender;然后在客户端打印条件消息不是更有效吗? -
@AsheshKumar 我真的不明白这是怎么重复的。
-
(哦,调试 101,
SELECT循环中的变量...)
标签: sql-server stored-procedures cursor