Question

I have a table Transactions where I am saving two records for one transaction, one for debiting and other crediting.

So I have two columns in table creditAmount(Money) and debitAmount(Money).

I want a table level constraint that either of the column is not null in each row. i.e. If row #3 creditAmount is null then debitAmount must hold some value and Vice Versa.

How to ensure the same when inserting a record in a row?

Was it helpful?

Solution

You can add a CHECK constraint to the table:

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))

OTHER TIPS

If you are handling via Front-end (your application), then the issue of both Credit and Debit being null won't arise. At least one entry is inserted, either in Debit or Credit.

I guess you want to put a constraint when someone is handling via back-end and directly inserting values in a table. In that case, Chris suggested a solution.

But even if you are inserting from back-end, I am not following why I would record a transaction when neither it is Debit nor Credit.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top