首页 > 解决方案 > 将约束设置为从 0 开始,然后仅从 9 开始并包含 11 位数字?

问题描述

我目前正在创建一个数据库项目,其中它只接受一个以“09”开头的有效电话号码,其余的是任何数字,尽管它应该仅限于包括 09 在内的 11 个数字。使用下面的代码,它只接受 11 个数字但即使我尝试了 63256115426 这样的数字,它仍然可以被接受。

([ContactNo]>=(0) AND [ContactNo]<=(9999999999.))

标签: sqlsql-serverconstraints

解决方案


您遇到的第一个问题是您为电话号码使用了错误的数据类型,因此您需要使用适合您情况的正确数据类型CHAR(11)/VARCHAR(11)

然后,您需要按如下方式创建约束

CREATE TABLE MyTable (
  ContactNo varchar(255)
  CONSTRAINT CK_ContactNo2 
  CHECK (ContactNo LIKE '09[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')                 
); 



INSERT INTO MyTable(ContactNo) VALUES ('11111') -- Fail
INSERT INTO MyTable(ContactNo) VALUES ('09123456789')-- Succeed

如果您不重新创建表格,请不要忘记删除前一个。


推荐阅读