检查货币约束

Check Constraint for Money

我需要在用于表示为 service/product 支付的美元的单个列上使用检查约束。

我希望检查此检查约束以确保没有前导空格(例如 LEFT(1)<>''),没有尾部空格(例如 RIGHT(1)<>''),并且有没有科学计数法,没有逗号,没有 NULL 值,小数点后不超过 4 位(例如 1234567890.0000)

大多数您想检查的事情,如果您将货币类型列设置为 money 类型而不是将其设置为 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]%')

可以通过在列前面创建 table 时简单地放置 "not null" 来防止空值。希望这能给你一个想法。您可以使用正则表达式来防止出现逗号和科学记数法。尽管如此,我还是希望使用正确的数据类型。