2011-11-10 12 views
2

SQL Server 2008 Management Studioを使用しています。以下は私が書かなければならないものであり、第2の制約のためにいくつかの困難を抱えています。それは私を少し混乱させ、私は本当にいくつかの助けに感謝します。SQL Server条件付きCHECK制約

APデータベースの請求書テーブルに2つの新しいチェック制約を追加するALTER TABLEステートメントを作成します。最初は、(1)PaymentTotalがゼロの場合のみPaymentDateをnullにし、(2)PaymentTotalがゼロより大きい場合のみPaymentDateがnullでないようにする必要があります。 2番目の制約は、PaymentTotalとCreditTotalの合計がInvoiceTotalより大きくならないようにする必要があります。

ここでは、最初の制約は機能しますが、2番目の制約はありません(PaymentTotalとCreditTotalの合計がInvoiceTotalより大きい)。

ALTER TABLE Invoices WITH CHECK 
ADD check (
    (PaymentTotal = 0 AND PaymentDate is NULL) 
    OR 
    (PaymentTotal > 0 AND PaymentDate is NOT NULL) 
) 
ADD CHECK (
    (PaymentTotal < InvoiceTotal = SUM) 
    OR 
    (CreditTotal < InvoiceTotal = SUM) 
) 

ありがとうございました。

+0

宿題の質問? – Seph

+0

第1の変更はあなたに何が起こらなければならないかを伝えています – xQbert

答えて

3

パラメータなしで集計関数(SUM())を作成しました。

"2番目の制約は、PaymentTotalとCreditTotalの合計がInvoiceTotalより大きくならないようにする必要があります。これは私にとってはちょっと混乱しますが、ここで変更する必要があります:

ALTER TABLE Invoices WITH CHECK 
ADD check ( 
    (PaymentTotal = 0 AND PaymentDate is NULL) 
    OR 
    (PaymentTotal > 0 AND PaymentDate is NOT NULL) 
) 
go 

ALTER TABLE Invoices WITH CHECK 
ADD CHECK ( 
    (PaymentTotal + CreditTotal) <= InvoiceTotal 
) 
go 
+0

このようなクエリを手伝ってくれてありがとうございました。私は本当にそれを感謝します。再度、感謝します – user1039863

2
... 
ADD CHECK (
    PaymentTotal + CreditTotal <= InvoiceTotal 
)