【发布时间】:2014-06-13 11:42:44
【问题描述】:
我有一张表,想根据同一张表的其他列更新一列。表格设计和表格数据请看下图。
在这个 tbl 中,我想按以下步骤更新 JoinDate。
1) 如果 ModifiedDatetime 不为 null,则 ModifiedDatetime 否则 CreatedDate。
2) 现在如果 NextLevel 是 Hour 那么想要添加我们在 setp 1 中拥有的上述日期的小时
3) 现在如果 NextLevel 是 Day 那么想要添加我们在 setp 1 中拥有的上述日期的 Day
4) 现在如果 NextLevel 是 Min 然后想要添加我们在 setp 1 中拥有的上述日期的 Min
5) 最后在完成所有上述过程后,我将获得日期,我想使用该数据来更新 joindate。
我在光标下方执行了此操作,但我想使用 sql 更新查询来执行此操作。
DECLARE @EmpID INT
Declare @DtTm datetime
DECLARE @NextLevl INT
Declare @JoinDtTm datetime
DECLARE CurProg CURSOR FOR
select EmpID from tblEmp
OPEN CurProg
FETCH NEXT
FROM CurProg INTO @EmpID
WHILE @@FETCH_STATUS = 0
BEGIN
select @DtTm = case when ModifiedTime is null then CreatedDate else ModifiedTime end, @NextLevl = NextLevel from tblEmp where EmpID = @EmpID
if (@NextLevl = 'Min')
BEGIN
set @JoinDtTm = DATEADD(MI,1,@DtTm)
END
ELSE IF (@NextLevl= 'Hour')
BEGIN
set @JoinDtTm = DATEADD(HH,1,@DtTm)
END
ELSE
BEGIN
set @JoinDtTm = DATEADD(D,1,@DtTm)
END
--update tblEmp set JoinDtTm = @JoinDtTm where EMPId= @EMPId
FETCH NEXT
FROM CurProg INTO @EmpID
END
CLOSE CurProg
DEALLOCATE CurProg
谢谢, 希特什
【问题讨论】:
-
所以这是你的要求。你有没有尝试过?
-
是的,我使用 CURSOR 完成了此操作,但我想在没有光标的情况下完成此操作。
-
使用光标发布您的代码...如果不出意外,它将有助于澄清您的问题。
-
您好,我已经编辑了我的问题,并在其中添加了我的 CURSOR。
标签: sql sql-server sql-server-2008 sql-update