UPDATE 语句中使用 CASE 更新列的问题?

kwer 2009-06-04 01:35:13


DECLARE @I int
...
IF @I = 1
BEGIN
UPDATE 表 SET 字段1 = xx
END
ELSE IF @I = 2
BEGIN
UPDATE 表 SET 字段2 = xx
END
ELSE IF @I = 3
BEGIN
UPDATE 表 SET 字段3 = xx
END
...



一大堆 IF ELSE , 想用 CASE 来实现
...

CASE @I

WHEN 1 BEGIN UPDATE 表 SET 字段1 = xx END

WHEN 2 BEGIN UPDATE 表 SET 字段2 = xx END

WHEN 3 BEGIN UPDATE 表 SET 字段3 = xx END

ELSE ...
END

...





能实现不?
...全文
706 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
风中的学 2011-08-16
  • 打赏
  • 举报
回复
一楼的回答我也受益了,谢谢啊!!
ChinaJiaBing 2009-06-04
  • 打赏
  • 举报
回复
像这样..

declare @tb table(id int,name nvarchar(10))
insert into @tb select 1,'张三'
union all select 2,'李四'
union all select 3,'三五'

declare @var int
set @var=1
--update @tb set id=1
update @tb set id = (case when @var=1 then 1 end),
name= case when @var=1 then 'china' end
select * from @tb


(3 行受影响)
id name
----------- ----------
1 china
1 china
1 china

(3 行受影响)
ks_reny 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kwer 的回复:]
用字符串?

问题是我写在触发器里,反应要求要高些
[/Quote]
那你的變量怎麼得來的?
olddown 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
SQL codeUPDATE表SET字段1=case@Iwhen1thenxxelse字段1end,
字段2=case@Iwhen2thenxxelse字段2end,
...
[/Quote]
可以的,sql语言艺术这本书中就有。
kwer 2009-06-04
  • 打赏
  • 举报
回复
结贴 !
kwer 2009-06-04
  • 打赏
  • 举报
回复
1楼方法很巧妙啊
jia_guijun 2009-06-04
  • 打赏
  • 举报
回复
DECLARE @I int
set @i=x

update tb set Col1=(case when @i=1 then xxx else Col1 end),
Col2=(case when @i=2 then xxx else Col2 end),
Col3=(case when @i=3 then xxx else Col3 end),
Col4=(case when @i=4 then xxx else Col4 end)
....
ai_li7758521 2009-06-04
  • 打赏
  • 举报
回复
DECLARE @CMD NVARCHAR(100),@I int
ai_li7758521 2009-06-04
  • 打赏
  • 举报
回复
DECLARE @CMD NVARCHAR(100).@I int

CASE @I
WHEN 1 @CMD='UPDATE 表 SET 字段1 = xx'
WHEN 2 @CMD='UPDATE 表 SET 字段2 = xx'
WHEN 3 @CMD='UPDATE 表 SET 字段3 = xx'
ELSE END
EXEC(@CMD)
水族杰纶 2009-06-04
  • 打赏
  • 举报
回复
--TRY
DECLARE @S VARCHAR(200)
DECLARE @I INT
SET @I=3
SET @S='UPDATE 表 SET 字段'+LTRIM(@I)+'=XX'
--PRINT @S
EXEC (@S)
Rotel-刘志东 2009-06-04
  • 打赏
  • 举报
回复
不能实现的。
kwer 2009-06-04
  • 打赏
  • 举报
回复
用字符串?

问题是我写在触发器里,反应要求要高些
jia_guijun 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
SQL codeUPDATE表SET字段1=case@Iwhen1thenxxelse字段1end,
字段2=case@Iwhen2thenxxelse字段2end,
...
[/Quote]


顶,应该可以。
子陌红尘 2009-06-04
  • 打赏
  • 举报
回复
DECLARE @I int
DECLARE @S varchar(8000)

SET @S=
CASE @I

WHEN 1 THEN 'UPDATE 表 SET 字段1 = xx'

WHEN 2 THEN 'UPDATE 表 SET 字段2 = xx'

WHEN 3 THEN 'UPDATE 表 SET 字段3 = xx'

ELSE ...
END

EXEC(@S)
ks_reny 2009-06-04
  • 打赏
  • 举报
回复
貌似不行.用動態語句吧.
子陌红尘 2009-06-04
  • 打赏
  • 举报
回复
不能,但可以用动态SQL。
百年树人 2009-06-04
  • 打赏
  • 举报
回复
UPDATE 

SET
字段1=case @I when 1 then xx else 字段1 end,
字段2=case @I when 2 then xx else 字段2 end,
...

34,594

社区成员

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

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