首页 > 解决方案 > 如果其他列与某个 DataType 匹配,如何将行更新为有效?

问题描述

我有一张有 5 行的桌子。一个 ID 列、2 个 varchar 列、一个 isValid 列和一个 ValidationFailure 列。2 列的数据通过代码使用来自 excelsheet 的数据进行更新。插入 2 列时的数据类型是 varchar。我现在必须检查这 2 列是否与 MONEY 类型匹配,如果存在问题,则将列 isValid 更新为 false 并使用 ValidationFailure 列连接未通过测试的列名。

我正在使用带有 where 子句的更新语句。但我无法串联不符合条件的列名。

我正在使用以下更新语句:

update t
set t.isValid = 0
from table t
where IsNumeric(t.col1+'e0') = 0 or IsNumeric(t.col2+'e0') = 0

如何使用不符合条件的列名更新 t.ValidationFailure 列?

如果两者都失败,则列值可以是 col1,col2

标签: sqlsql-server

解决方案


这可以通过 CASE 来实现

update t set
  t.isValid = 0,
  t.ValidationFailure = 
    case 
      when IsNumeric(t.col1+'e0') + IsNumeric(t.col2+'e0') = 0 then 'both'
      when IsNumeric(t.col1+'e0') = 0 then 'col1' 
      when IsNumeric(t.col2+'e0') = 0 then 'col2'
      else 'unknown'
    end
from table t 
where IsNumeric(t.col1+'e0') = 0 
  or IsNumeric(t.col2+'e0') = 0

推荐阅读