SP更新一列

时间:2015-07-27 06:25:05

标签: sql-server tsql conditional-statements

这是我的表[![生物识别系统员工

  • 列出项目

    AttendanceLogs

我正在使用此SP但收到错误消息当EXISTS未引入子查询时,只能在选择列表中指定一个表达式。 请有人帮我谢谢。

IF(
     (
        SELECT(
           SELECT * FROM AttendanceLogs 
           WHERE LogDateTime < CURRENT_TIMESTAMP
           and LogDateTime > (
              select CONVERT(datetime,CURRENT_TIMESTAMP)
           )
        )
     %2)
=0)
begin
 Update AttendanceLogs set Direction=1
end
else
begin
Update AttendanceLogs set Direction=0
end 

我正在创建员工出勤系统。基本上我们有生物识别手指扫描设备来跟踪时间并将其存储到数据库,但设备无法存储时间,因为它只能检查,如“方向”栏中所示。现在我要做的是将Direction列从1更改为0如果员工1在7:27 Pm登录,则应该记录为'1'并且当同一员工尝试在当天7:28 Pm再次登录时,它应记录为'0'。它将是更新记录的基础

2 个答案:

答案 0 :(得分:0)

你这是错误的做法。

你应该这样做:

UPDATE AttendanceLogs 
SET Direction = CASE WHEN <condition> THEN 0 ELSE 1 END

应根据您的具体情况更换<condition>

答案 1 :(得分:0)

阅读错误消息:

  

当选择列表中只能指定一个表达式时   EXISTS

没有引入子查询

如果您从IF声明中删除了不必要的内容,最终会得到以下结果:

 IF
    (
        SELECT *
        FROM AttendanceLogs 
        WHERE LogDateTime < CURRENT_TIMESTAMP 
        and LogDateTime >  CONVERT(datetime,CURRENT_TIMESTAMP)
    )%2
=0

那么,问题在于您尝试应用%运算符的内容? *正在选择所有列,引擎不知道要应用%2的列。

另外,我猜你试图做这样的事情:

UPDATE AttendanceLogs
SET Direction = IIF([MyColumn] % 2 = 0, 1, 0)
WHERE LogDateTime < CURRENT_TIMESTAMP 
    and LogDateTime >  CONVERT(datetime,CURRENT_TIMESTAMP)