如何解决将多个验证应用于SQL记录并识别所有失败的验证
我有一个要求,我需要在SQL数据库中捕获所有失败的验证。
我有下表:
department age
IT 27
IT 25
Marketing 29
Fashion 30
IT 32
IT 28
我的验证规则如下:
- 部门应该是IT
- 年龄应该在20多岁
- 年龄不应该是25
这些是示例验证,我的要求是捕获所有失败的记录以及失败的条件,我通过使用union实现了它,如下所示:
select department,age,'Age is 25' as FailedValidation,1 as FailedValidationId from
CENTRALFINANCETAX_IM_DEV.salluTest where age = 25
union
select department,'Age is not in 20s' as FailedValidation,2 as FailedValidationId from
CENTRALFINANCETAX_IM_DEV.salluTest where age > 29
union
select department,'Dept not IT' as FailedValidation,3 as FailedValidationId from
CENTRALFINANCETAX_IM_DEV.salluTest where department != "IT"
以下是获得的结果:
department age FailedValidation FailedValidationId
IT 32 Age is not in 20s 2
Marketing 29 Dept not IT 3
Fashion 30 Dept not IT 3
Fashion 30 Age is not in 20s 2
IT 25 Age is 25 1
但是,如果验证增加,我必须添加许多选择查询。
是否有其他更好的性能方法?
解决方法
您可以使用cross apply
:
select t.*,x.*
from centralfinancetax_im_dev.sallutest t
cross apply (values
(1,case when t.age = 25 then 'Age is 25' end),(2,case when t.age > 29 then 'Age is not in 20s' end),(3,case when t.department <> 'IT' then 'Dept not IT' end)
) x(FailedValidationId,FailedValidation)
where x.FailedValidation is not null
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。