sql - 如果其他列与某个 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
解决方案
这可以通过 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
推荐阅读
- angular - 按键处理程序慢
- go - go-twitter API 提取视频 URL
- django - S3下载后在Django中显示成功消息
- android - 使用 Firebase AuthUI 进行身份验证的 Android 动态功能模块
- three.js - THREE.FirstPersonControls 不是构造函数
- javascript - 将行和列动态添加到 Google 柱形图中
- ruby-on-rails-5 - 如何在活动管理导轨中动态添加和删除字段
- javascript - React.js Context API:如何在维护其他对的同时只更新对象的一个值对?
- html - 修复 HTML 表格中的空白
- php - 如何从 Twilio 的参与者那里检索视频记录 sid?