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
...
能实现不?
17 个解决方案
#1
UPDATE
表
SET
字段1=case @I when 1 then xx else 字段1 end,
字段2=case @I when 2 then xx else 字段2 end,
...
#2
不能,但可以用动态SQL。
#3
貌似不行.用動態語句吧.
#4
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)
#5
顶,应该可以。
#6
用字符串?
问题是我写在触发器里,反应要求要高些
问题是我写在触发器里,反应要求要高些
#7
不能实现的。
#8
--TRY
DECLARE @S VARCHAR(200)
DECLARE @I INT
SET @I=3
SET @S='UPDATE 表 SET 字段'+LTRIM(@I)+'=XX'
--PRINT @S
EXEC (@S)
#9
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)
#10
DECLARE @CMD NVARCHAR(100),@I int
#11
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)
....
#12
1楼方法很巧妙啊
#13
结贴 !
#14
可以的,sql语言艺术这本书中就有。
#15
那你的變量怎麼得來的?
#16
像这样..
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 行受影响)
#17
一楼的回答我也受益了,谢谢啊!!
#1
UPDATE
表
SET
字段1=case @I when 1 then xx else 字段1 end,
字段2=case @I when 2 then xx else 字段2 end,
...
#2
不能,但可以用动态SQL。
#3
貌似不行.用動態語句吧.
#4
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)
#5
顶,应该可以。
#6
用字符串?
问题是我写在触发器里,反应要求要高些
问题是我写在触发器里,反应要求要高些
#7
不能实现的。
#8
--TRY
DECLARE @S VARCHAR(200)
DECLARE @I INT
SET @I=3
SET @S='UPDATE 表 SET 字段'+LTRIM(@I)+'=XX'
--PRINT @S
EXEC (@S)
#9
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)
#10
DECLARE @CMD NVARCHAR(100),@I int
#11
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)
....
#12
1楼方法很巧妙啊
#13
结贴 !
#14
可以的,sql语言艺术这本书中就有。
#15
那你的變量怎麼得來的?
#16
像这样..
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 行受影响)
#17
一楼的回答我也受益了,谢谢啊!!