我可以使SQL Server 2005表列只接受字母和数字吗?

时间:2010-05-27 08:46:19

标签: regex sql-server-2005 validation

如果我们有一个列,它将存储只接受字母和数字的用户名,我们总是使用javascript或甚至代码中的服务器验证对此输入字段进行验证..但我想知道是否有任何方法可以允许我在Table列本身进行此验证,甚至有人尝试从任何不接受的地方输入数据并抛出异常?

3 个答案:

答案 0 :(得分:4)

您可以在列上使用check constraint执行某些操作。 T-SQL原本没有正则表达式函数,虽然LIKE(如下面的AakashM所述)足够聪明,可以做到这一点。要获得完整的正则表达式功能,可以使用CLR integration包装.Net Regex函数,然后使用UDF包装正则表达式,并使用检查约束来调用函数来评估列的内容。

这里是关于在T-SQL中使用CLR UDF进行正则表达式匹配的another article

答案 1 :(得分:2)

您可以在目标表上使用触发器并在执行插入之前验证输入。

Read more about triggers

答案 2 :(得分:2)

AakashM在我写这篇文章的时候被打败了,但不管怎么说这是代码:

CREATE TABLE #Table
(
    Data VARCHAR(50) NOT NULL  CHECK(Data NOT LIKE '%[^a-zA-Z90-9]%')
)

INSERT INTO #Table(Data)
VALUES ('123abc')

GO

INSERT INTO #Table(Data)
VALUES ('123_abc')

GO

SELECT * FROM #Table

DROP TABLE #Table

请注意,表达式是双重否定,因此“不喜欢不(a-z或0-9)”,因此%符号将在插入的字符串中的任何位置捕获违规。