如果我们有一个列,它将存储只接受字母和数字的用户名,我们总是使用javascript或甚至代码中的服务器验证对此输入字段进行验证..但我想知道是否有任何方法可以允许我在Table列本身进行此验证,甚至有人尝试从任何不接受的地方输入数据并抛出异常?
答案 0 :(得分:4)
您可以在列上使用check constraint执行某些操作。 T-SQL原本没有正则表达式函数,虽然LIKE(如下面的AakashM所述)足够聪明,可以做到这一点。要获得完整的正则表达式功能,可以使用CLR integration包装.Net Regex函数,然后使用UDF包装正则表达式,并使用检查约束来调用函数来评估列的内容。
这里是关于在T-SQL中使用CLR UDF进行正则表达式匹配的another article。
答案 1 :(得分:2)
您可以在目标表上使用触发器并在执行插入之前验证输入。
答案 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)”,因此%符号将在插入的字符串中的任何位置捕获违规。