▲UPDATE中CASE方法筛选更新列的问题

CnEve 2008-12-29 07:11:33
好久没上这里了,改版后满漂亮的啊,可惜论坛内搜索功能就显得相对模糊了..
麻烦大大们帮个忙了,或者帮顶顶 哈
--该方法行不通,貌似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 关键字。


...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CnEve 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 libin_ftsafe 的回复:]
分开来一个个写,不要想偷懒...
SQL code
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
[/Quote]
你太有才了,哈哈 也不失为一个解决的办法
CnEve 2008-12-29
  • 打赏
  • 举报
回复
若使用 WITH 方式该如何写呢?
实在不想拼语句,这个PROC涉及上千万行的数据
子陌红尘 2008-12-29
  • 打赏
  • 举报
回复
分开来一个个写,不要想偷懒...


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

子陌红尘 2008-12-29
  • 打赏
  • 举报
回复
语法不支持吧

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧