代码之家  ›  专栏  ›  技术社区  ›  Eric Haskins

类似[0-9]的SQL Server命令将不匹配0到9之间的任何数字

  •  1
  • Eric Haskins  · 技术社区  · 16 年前

    这是我对客户表的约束。

    ALTER TABLE Customers
        ADD CONSTRAINT CN_CustomerPhone
        CHECK (Phone LIKE '([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')
    

    为什么失败了?

    INSERT INTO Customers
    (CustomerName, Address, City, State, Zip, Phone)
    VALUES
    ('Some Name','An Address', 'City goes here', 'WI', 12345, '(800) 555-1212')
    

    显示此错误消息。

    消息547,级别16,状态0,第1行 insert语句与冲突 检查约束“cn_customerphoneno”。 数据库中发生冲突 “会计”,表“dbo.customers”, “电话”列。声明已经 结束。

    我肯定我错过了一些非常简单的东西,但我找不到。

    我试过将限制简化为“像电话这样的”[0-9]”,并插入一个数字,但还是失败了。世界跆拳道联盟?

    2 回复  |  直到 14 年前
        1
  •  5
  •   shahkalpesh    16 年前

    检查电话字段的长度。
    是15个字符还是更多?

    在这里将代码与临时表一起使用

    
    create table #temp
    (phone varchar(15))
    
    ALTER TABLE #temp
        ADD CONSTRAINT CN_CustomerPhone
        CHECK (Phone LIKE '([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')
    
    INSERT INTO #temp
    (Phone)
    VALUES
    ('(800) 555-1212')
    
    select * from #temp
    
    drop table #temp
    
    
        2
  •  1
  •   Eric Haskins    16 年前

    我是个白痴,这个领域被宣布为NChar,我没有考虑填充空间。