我正在为我的Web应用程序编写Scalar函数。我想计算员工的加入日期和辞职日期之间的日期差异。
我的大部分代码都工作正常,但我无法弄清楚如何在游标中使用参数变量。
假设我有这段代码
Declare myCursor Cursor for
Declare @join_date datetime
Declare @resign_date datetime
Declare @emp_stat nvarchar(50)
--What I have been trying to do. (Not working)
Select @join_date = Convert(datetime, join_date), @emp_stat = Convert(datetime, emp_stat) from t_emp_info where .....
OPEN product_cursor
WHILE @@FETCH_STATUS = 0
BEGIN
if (@emp_stat = 'P')
Begin
//DateDiff .....
End
FETCH NEXT FROM vendor_cursor
INTO @join_date , @emp_stat
End
Close myCursor
DEALLOCATE myCursor;
我无法让这个工作,但我想要的是我想将值存储在参数中,以便我可以在if条件语句中使用它。不知道如何解决这个问题。帮助将不胜感激
答案 0 :(得分:0)
您的光标名称已混淆,您的作业位置错误。尝试:
Declare myCursor Cursor for
Select join_date, emp_stat, resign_date from t_emp_info where .....
Declare @join_date datetime
Declare @resign_date datetime
Declare @emp_stat nvarchar(50)
OPEN myCursor
FETCH NEXT FROM myCursor
INTO @join_date , @emp_stat , @resign_date
WHILE @@FETCH_STATUS = 0
BEGIN
//Your logic here
FETCH NEXT FROM myCursor
INTO @join_date , @emp_stat, @resign_date
End
Close myCursor
DEALLOCATE myCursor;
但是你应该避开光标。有什么问题:
SELECT DATEDIFF(day, MAX(join_date), case when emp_stat = 'P' then getdate() else MAX(resign_date) end)
from t_emp_info
GROUP BY employee_id
或者类似的?