如何在sql server中使用每个循环?

时间:2012-07-15 02:44:00

标签: sql sql-server foreach

我有一个表tblEmpDetail,其中包含一列CreatedDate

我想为每个创建日期添加72小时,因此如果创建日期为2012-07-14 07:21:19.180,那么我希望输出为2012-07-17 07:21:19.180

有人可以告诉我如何才能实现这一目标?

实际上我想要做的就是去每一行,然后检查是否

getdate() - createddate 

等于或小于72小时;然后我需要在createddate添加72小时。否则我希望该列为null。我把我的代码粘贴到我的代码上。

Declare @PassedTime datetime
set @PassedTime= DATEDIFF(HH,Createddate, GETDATE())

if CONVERT(varchar(20),@PassedTime,108)>=CONVERT(varchar(20),'72:00:00',108)
begin
    select empno,empName,CreatedDate,dateadd(HH,72,CreatedDate)BD from tblEmpDetail 
end
else
begin
   select empno,empName,CreatedDate,'' as BD from tblEmpDetail
end

1 个答案:

答案 0 :(得分:5)

不需要循环。

SQL Server擅长“基于集合”的查询。

获得预测:

select
    CreatedDate,
    DateAdd(hour, 72, CreatedDate) [NewDate]
from
    tblEmpDetail

永久更新表格:

update
    tblEmpDetail
set
    CreatedDate = DateAdd(hour, 72, CreatedDate)

如果你必须有一个循环,你可以使用光标:

declare cur cursor fast_forward read_only for
select
    CreatedDate,
    DateAdd(hour, 72, CreatedDate) [NewDate]
from
    tblEmpDetail

-- here, you would use the cursor.

有关游标的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms180169.aspx

修改

您的上述查询可以按照以下方式进行:

select
    CreatedDate,
    CASE
        WHEN DateAdd(hour, 72, CreatedDate) <= GetDate() THEN NULL
        ELSE DateAdd(hour, 72, CreatedDate)
    END [NewDate]
from
    tblEmpDetail