如何创建互斥的表列

时间:2012-12-22 12:46:05

标签: sql-server tsql sql-server-2012 mutual-exclusion

我有一个表格,其中我为一个交易保存两个记录,一个用于借记和其他贷记。

所以我在表creditAmount(Money)debitAmount(Money)中有两列。

我想要一个表级约束,每列中的任何一列都不为空。 即如果第3行creditAmount为空,则debitAmount必须保留一些值,反之亦然。

如何在连续插入记录时确保相同?

2 个答案:

答案 0 :(得分:14)

您可以在表格中添加CHECK constraint

ALTER TABLE Transactions ADD CONSTRAINT CK_Transactions_DebitOrCreditExists
CHECK ((creditAmount IS NULL AND debitAmount IS NOT NULL) 
   OR (creditAmount IS NOT NULL AND debitAmount IS NULL))

答案 1 :(得分:0)

如果您通过前端(您的应用程序)进行处理,则不会出现Credit和Debit为空的问题。至少插入一个条目,可以是借方或贷方。

我猜你想在有人通过后端处理并直接在表中插入值时设置约束。在那种情况下,克里斯提出了一个解决方案。

但是,即使你是从后端插入,我也不会遵循为什么我会记录交易,既不是借记也不是信用。