我需要检查SQL Server表中的列值(字符串)是否以小写字母开头,并且只能包含“u”、“-”、数字和字母。我知道我可以使用sql server clr函数。但是,我正试图使用标量udf实现该验证,在这里可能做得很少……我可以使用'not like',但我不确定如何确保验证字符串而不考虑字符的顺序,或者换句话说,为此在sql中编写一个模式。使用sql clr函数更好吗?
任何帮助都将不胜感激。
提前谢谢
谢谢大家的评论。今天早上,我选择了CLR函数方式。为了达到我想要的目的,我创建了一个clr函数,它对输入字符串进行验证,并从sql udf调用该函数,它工作得很好。
为了使用sql clr函数和t-sql udf来度量t-sqludf的性能,我创建了一个sqlclr函数,它只检查输入字符串是否只包含小写字母,它应该返回true-else-false,并从udf(islowercaseclr)调用它。之后,我还创建了一个常规的t-sql udf(islowercasetsql),它使用'not like'执行相同的操作。
然后我创建了一个表(person),其中包含列名称(varchar)和isvalid(bit)列,并用要测试的名称填充该表。
数据:
1000条记录,名称列的值为“ashish”
1000条记录,名称列的值为“ashish”
然后我运行以下命令:
update person set isvalid=1,其中dbo.islowercasetsql(name)
更新了1000条以上的记录(IsValid=1)
不到一秒钟。
我删除了表中的所有数据,并用相同的数据重新填充了相同的数据。然后使用sql clr udf(isvalid=1)更新同一个表
这花了3秒钟!
如果对5000条记录进行更新,则常规UDF需要0秒,而CLR UDF需要16秒!
我对t-sql正则表达式的了解很少,或者我可以测试实际更复杂的验证条件。但我只想知道,即使我可以写下它,考虑到上面的例子,它会比sql clr函数快吗?
我们使用sql clr是因为我们可以实现更丰富的逻辑,否则如果我们用普通的sql编写,就很难实现。
很抱歉这么长的帖子。我只想从专家那里知道。如果你在这里什么都听不懂,请尽管问。
再次感谢您抽出时间。