実際には2つの異なるテーブルがあります。
PaymentDetails(ID, PaymentMethod) and
CreditCardDetails (PaymentDetailsID, CardholderName, CreditCardNumber)
両方のテーブルで、すべての列がNULL可能ではありません。
3つのケースすべてを同じテーブルに保持することが可能です。その場合は、次のことを試してください。
CREATE TABLE [dbo].[PaymentDetails]
(
ID INT IDENTITY(1,1) NOT NULL,
PaymentMethod INT NOT NULL CHECK (PaymentMethod IN (1,2,3)), -- Cash, Check, Credit
CheckNumber int NULL,
CardHoldersName nvarchar(100) NULL,
CreditCardNumber varchar(20) NULL
)
ALTER TABLE [dbo].[PaymentDetails]
ADD CONSTRAINT [PaymentTypeConstraint]
CHECK ((PaymentMethod = 1 AND CheckNumber IS NULL AND
CardholdersName IS NULL AND
CreditCardNumber IS NULL) OR
(PaymentMethod = 2 AND CheckNumber IS NOT NULL AND
CardholdersName IS NULL AND
CreditCardNumber IS NULL) OR
(PaymentMethod = 3 AND CheckNumber IS NULL AND
CardholdersName IS NOT NULL AND
CreditCardNumber IS NOT NULL));