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