使用案例

时间:2017-03-08 16:06:19

标签: sql tsql

我想根据另一列的值更新列。 像这样:

update mt
set
 case 
  when mt.type = 1  (1=float 2=boolean 3=datetime 4=character)
  then mt.float_value = mt.value
 end

 case 
  when mt.type = 2  (1=float 2=boolean 3=datetime 4=character)
  then mt.boolean_value = mt.value
 end

case 
  when mt.type = 3  (1=float 2=boolean 3=datetime 4=character)
  then mt.datetime_value = mt.value
 end
...
from myTable mt

我想更新列mt.float_value或mt.boolean_value或mt.datetime_value或mt.char_value,具体取决于列mt.type的值

if the column mt.type = 1 then update mt.float_value with  mt.value
if the column mt.boolean_value = 2 then update mt.float_value with  mt.value

依旧...... 这可能吗?我该如何进行此更新? 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

您可以将其拆分为三个查询:

update  mt
set     float_value = convert(value, float)
where   type = 1

update  mt
set     bit_value = convert(value, bit)
where   type = 2

update  mt
set     datetime_value = convert(value, datetime)
where   type = 3

答案 1 :(得分:1)

您可以尝试此操作,但如果无法将任何值转换为目标列类型,则会失败:

update mt
set 
 mt.float_value = case 
  when mt.type = 1  then convert(mt.value, float) else mt.float_value
 end,

 mt.boolean_value = case 
  when mt.type = 2  then convert(mt.value, bit) else mt.boolean_value
 end,

mt.datetime_value = case 
  when mt.type = 3  then  convert(mt.value, datetime) else mt.datetime_value
 end
...
from myTable mt