如何在Cursor SQL中使用参数变量

时间:2016-02-29 16:08:38

标签: sql-server tsql

我正在为我的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条件语句中使用它。不知道如何解决这个问题。帮助将不胜感激

1 个答案:

答案 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

或者类似的?