Sql server 2005 sql server 2005约束和验证

Sql server 2005 sql server 2005约束和验证,sql-server-2005,Sql Server 2005,我有一个存储付款详细信息的表,其中包含以下列:(paymentmethod——可以是支票、现金或信用卡)、(Checknumber)、(CardsName)、(creditcardnumber) 问题是:当paymentmethod为cash或check-thencardingsname时,creditcardname应保留为空,当paymentmethod为creditcard时,Checknumber应保留为空。您确实有两个不同的表: PaymentDetails(ID, PaymentMe

我有一个存储付款详细信息的表,其中包含以下列:(
paymentmethod
——可以是支票、现金或信用卡)、(
Checknumber
)、(
CardsName
)、(
creditcardnumber


问题是:当
paymentmethod
cash
或check-then
cardingsname
时,
creditcardname
应保留为空,当
paymentmethod
creditcard
时,
Checknumber
应保留为空。

您确实有两个不同的表:

PaymentDetails(ID, PaymentMethod) and
CreditCardDetails (PaymentDetailsID, CardholderName, CreditCardNumber)
两个表中的所有列都不可为空


可以将所有三个箱子放在同一张表中。在这种情况下,请尝试以下操作:

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

thanx但是我想把所有的列都放在一个表中得到这个eror:Msg 207,16级,状态1,第3行无效的列名“CardingName”。Msg 207,16级,状态1,第3行无效列名“CreditCardNumber”。