sql记录表中的验证

时间:2015-03-11 19:54:24

标签: sql sql-server tsql stored-procedures

我想检查指定字段的长度是x长度,可用值是数值

我可以通过使用两个单独的case语句来完成此操作,如下所示

(case when len(columnA) = 10 then 0 else 1 end)+
(case when IsNumeric(columnA) = 1 then 0 else 1 end)+
(case when len(columnB) = 8 then 0 else 1 end)+
(case when IsNumeric(columnB) = 1 then 0 else 1 end)

有没有更好的方法,因为我需要超过40列,它们的数据类型是varchar,每列都有特定的长度。

使用一些捷径将上述两个案例陈述减少为一行

1 个答案:

答案 0 :(得分:1)

如果您只关心列无效且对失败的标准不太感兴趣,那么您可以将两个条件放入一个case语句中

(case when len(columnA) = 10 and IsNumeric(columnA) = 1 then 0 else 1 end)

关于Sean提出的问题,ISNUMERIC只确认该值可以转换为数值数据类型,因此逗号和句点也是有效的。你可以检查任何不在数字范围内的单个字符

case when len(columnA) = 10 and ColumnA not like '%[^0-9]%' then 0 else 1 end

这有点难看,因为我们不得不说[不在范围内],所以你可能想稍微改变逻辑。