2015-03-18 108 views
0

下午所有,检查约束为钱

我需要一个单一列上的检查约束,用于表示美元支付服务/产品。 (1)<>''),没有尾部空格(例如RIGHT(1)<>''),没有空格科学记数法,没有逗号,没有NULL值,并且在小数点后不超过4位数(例如1234567890.0000)

任何和所有帮助将不胜感激!

谢谢 Hukd

回答

0

大部分要检查,可代替如果你把钱列类型有它为varchar,并允许用户输入的所有排序的,而不是只是阻止事情奇怪的数据。您可以使用以下来更改列:

Alter table tablename alter column columnname money; -- you can only do this if there is no constraint on it already and there is not data (or the data follows the money type rules) 

如果您决定保留它varchar,那么检查约束将非常复杂。到小数点后检查左,右空间和位数,可以使用以下约束:

CONSTRAINT chk CHECK(LEFT([paid], 1) != ' ' AND RIGHT([paid], 1) != ' ' AND LEN(SUBSTRING([paid], CHARINDEX('.', [paid])+1, LEN([paid]))) !> 4 AND paid like '%[^0-9]%') 

空值可以通过简单地投入,“不空”在列前创建表时被阻止。希望这给你一个想法。您可以使用正则表达式来防止逗号和科学记号。不过,我更喜欢使用正确的数据类型。

+0

感谢您的快速响应!我同意,使该列成为适当的数据类型是最佳实践。然而,长话短说,我从客户端接收数据,通常采用.txt格式。然后我有一个自动化进程,将数据拉入,并将其作为源数据加载到特定数据库。然后我有另一个自动化的过程,对上述数据进行一些分析。我不想将每个列手动格式化回正确的数据类型,而只想运行快速检查以确保所有值都可接受。你能详细说明这个正则表达式吗? – Hukd 2015-03-19 14:01:15

+0

因此,如果我考虑数字(0-9)以外的任何特殊符号,我可以使用“like”来检查这些符号。看到我上面的编辑。这意味着任何不是数字0-9的东西都会被检查。它会检查所有内容,包括逗号,空格,$,&等等。你也可以改变它。例如。如果您认为不需要检查字符,只需将它设为'%[0-9A-za-z]%“即可。 – sanmis 2015-03-20 00:23:34