可以考虑在insert语句中判断。毕竟你这里也只有3种情况而已。

解决方案 »

  1.   

    create table tb1(Tel_No varchar(15))
    ALTER TABLE dbo.tb1 ADD CONSTRAINT CHK_Tel_No_valid CHECK
    (
         Tel_No LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
      or Tel_No LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
      or Tel_No LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    );
    insert into tb1 select '12345678901'
    insert into tb1 select '123-12345678'
    insert into tb1 select '1234-12345678'
    insert into tb1 select '1234a12345678'
    /*
    (1 行受影响)(1 行受影响)(1 行受影响)
    消息 547,级别 16,状态 0,第 5 行
    INSERT 语句与 CHECK 约束"CHK_Tel_No_valid"冲突。该冲突发生于数据库"mydb",表"dbo.tb1", column 'Tel_No'。
    语句已终止。
    */
      

  2.   

    create table tb1(Tel_No varchar(15))
    ALTER TABLE dbo.tb1 ADD CONSTRAINT CHK_Tel_No_valid CHECK
    (
         (LEN(Tel_No) = 11 AND Tel_No NOT LIKE '%[^0-9]%')
    OR  (LEN(Tel_No) = 12 AND STUFF(Tel_No,4,1,'') NOT LIKE '%[^0-9]%' AND Tel_No LIKE '%-%' )
    OR  (LEN(Tel_No) = 13 AND STUFF(Tel_No,5,1,'') NOT LIKE '%[^0-9]%' AND Tel_No LIKE '%-%' )
    );阳春白雪、下里巴人 任选,个人喜好第一个