34,590
社区成员
发帖
与我相关
我的任务
分享
--该方法行不通,貌似UPDATE中不能像SELECT一样使用CASE来选择操作列
UPDATE [dbo].[Click_Time] SET (CASE DATENAME(HOUR,GETDATE())
WHEN 0 THEN [H0]
WHEN 1 THEN [H1]
WHEN 2 THEN [H2]
-- .........
WHEN 23 THEN [H23]
END) = 对应时段列值+1
WHERE [ID]=1
UPDATE [Click_Time]
SET H = H + 1
FROM [Ad_Click_Time] (CASE DATENAME(HOUR,GETDATE())
WHEN 1 THEN [H1]
WHEN 2 THEN [H2]
-- .........
WHEN 23 THEN [H23]
ELSE [H0] END) AS H
WHERE [ID]=1
--分析正常,错误提示:
--Msg 207, Level 16, State 1, Line 6
--列名 'H1' 无效。
--Msg 207, Level 16, State 1, Line 7
--列名 'H2' 无效。
--Msg 207, Level 16, State 1, Line 8
--列名 'H0' 无效。
--Msg 215, Level 16, State 1, Line 8
--为不是函数的对象 'Click_Time' 提供了参数。如果这些参数要作为表提示,则需要使用 WITH 关键字。
UPDATE [Click_Time]
SET
[H1] = [H1] + (CASE DATENAME(HOUR,GETDATE() WHEN 1 THEN 1 ELSE 0 END),
[H2] = [H2] + (CASE DATENAME(HOUR,GETDATE() WHEN 2 THEN 1 ELSE 0 END),
...
[H23] = [H23]+ (CASE DATENAME(HOUR,GETDATE() WHEN 23 THEN 1 ELSE 0 END)
FROM
[Ad_Click_Time]
WHERE
[ID]=1