;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/*这个列需要是表中是不重复的那种 比如主键*/
如果我猜的没错你函数应该返回的是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 如果我猜错了,那神马都是浮云了。
(
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/*这个列需要是表中是不重复的那种 比如主键*/
替换下面的位置
;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
如果我猜错了,那神马都是浮云了。
你好!按照你的方法我试了下发现这个的确能够实现我的功能。但是因为我用到的正则表达式导致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'。不知道我理解的对不对呢?那这个错又是为什么呢?是我的数据本来存在问题。所以就报错了?也就是说对出错的数据就无法忽略而继续执行?极度需要你的帮助!相当感谢!