0

列を持つ支払いの詳細を格納するテーブルがあります: ( paymentmethod- 小切手、現金、またはクレジットカードのいずれか)、( Checknumber)、( Cardholdersname)、( creditcardnumber)。

質問は次のとおりです。 when paymentmethodiscashまたは check thenCardholdersnamecreditcardnumber空白のままにし、 when paymentmethodis creditcardthenを空白のままにする必要があることをどのように検証しますかChecknumber

4

1 に答える 1

1

実際には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));
于 2012-08-25T23:24:57.320 に答える