如何创建简洁的SQL' Check Constraint'不允许所有字符串字段的某些字符?

时间:2012-10-23 20:09:21

标签: sql tsql sql-server-express check-constraints

我有一个SQL(SQL Server Express 2008)表,其中包含少量VARCHAR个字段。

我想创建一个Check Constraint,以确保VARCHAR值中没有一个包含某些字符。

示例:(不允许在FirstName中使用< > 字符LastName列)

(NOT [FirstName] LIKE '%<%' 
AND NOT [FirstName] LIKE '%>%' 
AND NOT [FirstName] LIKE '%?%')
AND 
(NOT [LastName] LIKE '%<%' 
AND NOT [LastName] LIKE '%>%' 
AND NOT [LastName] LIKE '%?%')

上面的SQL语法工作正常,但如果有做同样事情的简写方法会很好。 注意示例中的冗余。如果我想添加更多列和/或无效字符

,这很麻烦

如果我们可以做这样的事情会很好:

NOT FirstName,LastName LIKE IN ('<','>','?')

我可以在Check Constraint表达式中执行类似的操作吗?

2 个答案:

答案 0 :(得分:5)

您可以使用

NOT ([FirstName]  LIKE '%[<>?]%' OR [LastName]  LIKE '%[<>?]%')

答案 1 :(得分:1)

更改table nom_table,您应该添加constraint ck check(firstname not like '%[<,>,?]%')