varchar(5)字段的约束

时间:2015-01-16 21:28:42

标签: sql sql-server-2008 constraints

在sql 2008上有脑痉挛。拥有第三方应用和数据库,电话分机字段定义为varchar(5)。问题是他们有一个报告(无法改变),除了数字之外的任何错误都被作为值放入,当然varchar(5)他们可以放置任何报告错误。想要设置约束来限制最多5个数字的值,包括前导零或空值。在语法上苦苦挣扎。这就是我到目前为止所做的事情

查询

ALTER TABLE dbo.person_test2 ADD CONSTRAINT CK_ext
    CHECK (Pext like '[0-9][0-9][0-9][0-9][0-9]')

不会全部为空,必须为5个字符。 它背后的原因是什么?

2 个答案:

答案 0 :(得分:2)

CHECK (Pext Not like '%[^0-9]%' collate latin1_general_bin)

只需要你。

无需专门处理NULL。如果条件评估为未知,则不违反约束。

^否定指定的范围,因此对于不包含非数字字符的字符串,此条件的计算结果为true。

如果还应禁止空字符串,则可能需要添加AND Pext <> ''

binary collat​​e子句可防止¼匹配等字符。在许多排序规则中,它们在0到9之间排序,因此将包含在0-9范围内。

答案 1 :(得分:1)

这个怎么样:

ALTER TABLE dbo.person_test2 ADD CONSTRAINT CK_ext
    CHECK (Pext like '[0-9]' OR
           Pext like '[0-9][0-9]' OR
           Pext like '[0-9][0-9][0-9]' OR
           Pext like '[0-9][0-9][0-9][0-9]' OR
           Pext like '[0-9][0-9][0-9][0-9][0-9]'
           )

此约束允许NULL值以及长度介于1和5之间的所有数字。其他所有值都被禁止。

在考虑到Martin Smiths回答的正确评论后编辑。