我需要检查CHAR字段的数字

时间:2012-08-16 19:08:56

标签: sql-server sql-server-2008 constraints

如何检查table中的字段以确认CHAR(X)字段仅包含数字not NULL,并且具有X位数并返回特定error每个故障? 我能想到的任何东西都非常笨重。

2 个答案:

答案 0 :(得分:0)

尝试使用TRY_CONVERT进行数据验证,其中语法检查null,如

SELECT TRY_CONVERT(int,'21245') 

以下内容可能有助于匹配不正确的字段

SELECT * FROM  Table_1 where LTRIM(RTRIM(fieldname)) like '%[^0-9]%'

答案 1 :(得分:0)

结果集

insert into CheckConstraint(Digit)values(1) //Failed

insert into CheckConstraint(Digit)values('ws') //Failed

insert into CheckConstraint(Digit)values(12345) //Passed

为此,您的表应该是这样的,以避免Nullable值

CREATE TABLE CheckConstraint
(
  Digit Char(5) Not Null
)

创建一个函数

Create FUNCTION Validations() RETURNS INT AS BEGIN
  DECLARE @ret INT  = 0 ;
  SELECT @ret = IsNull(COUNT(Digit), 0) FROM CheckConstraint 
  WHERE Digit not like '[0-9]%'
  RETURN IsNUll(@ret, 0);
END;

避免使用非数字字符的约束

alter TABLE CheckConstraint
  add CONSTRAINT CheckValidations CHECK ((dbo.Validations() = 0));

避免少于或大于5个字符的约束

ALTER TABLE [dbo].CheckConstraint
ADD CONSTRAINT [MinLengthConstraint] CHECK (DATALENGTH(Digit) = 5)