create table taa (mobile varchar(11),check ( mobile like '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))

解决方案 »

  1.   

    ;with t as
    (
    select *, IsMatch=dbo.regexIsMatch ((SELECT max(mobile) FROM T_Mobiles),'^(134|135|136|137|138|139|150|151|152|157|158|159|187|188|130|131|132|154|155|156|185|186|133|153|180|189)\d{8}$',0))
    from T_Mobiles
    )
    delete from t where IsMatch=0--如果是2000的话delete a from T_Mobiles as a,
    (
    select *, IsMatch=dbo.regexIsMatch ((SELECT max(mobile) FROM T_Mobiles),'^(134|135|136|137|138|139|150|151|152|157|158|159|187|188|130|131|132|154|155|156|185|186|133|153|180|189)\d{8}$',0))
    from T_Mobiles) as b
    where a.id=b.id/*这个列需要是表中是不重复的那种 比如主键*/
      

  2.   

    如果我猜的没错你函数应该返回的是0或者1吧上面的语句需要改一下
    替换下面的位置
    ;with t as
    (
    select *, IsMatch=dbo.regexIsMatch (mobile,'^(134|135|136|137|138|139|150|151|152|157|158|159|187|188|130|131|132|154|155|156|185|186|133|153|180|189)\d{8}$',0))
    from T_Mobiles
    )
    delete from t where IsMatch=0
    如果我猜错了,那神马都是浮云了。
      

  3.   


    你好!按照你的方法我试了下发现这个的确能够实现我的功能。但是因为我用到的正则表达式导致30万行数据特别特别慢!大概要十五分钟。所以我最后还是决定不用这个表达式了。只对插入的数据进行数字的验证。我创建了表,  
      CREATE TABLE T_Mobiles(
      mobile char(12)
      CONSTRAINT chk_mobile 
        CHECK (
            LEN(RTRIM(mobile)) = 11 AND 
            PATINDEX('%[^0-9]%', RTRIM(mobile)) = 0)
    );然后我用bulk insert导入数据的,但是我发现导入的数据根本不会对其进行检查,只会根据我设置的分隔符然后插入到表中。然后我查看bulk insert这个方法,发现里面有一个CHECK_CONSTRAINTS的属性。我百度了好久但是没发现相关的教我们怎么用这个参数的,我折腾了半天,理解为这个属性没有值,就只是加这个属性,不用设置参数。其就会检验插入的表T_Mobiles的设置,从而实现对其插入数据的检验。但是我一这样操作,就报错:INSERT 语句与 CHECK 约束"chk_mobile"冲突。该冲突发生于数据库"Mobiles",表"dbo.T_Mobiles", column 'mobile'。不知道我理解的对不对呢?那这个错又是为什么呢?是我的数据本来存在问题。所以就报错了?也就是说对出错的数据就无法忽略而继续执行?极度需要你的帮助!相当感谢!