2011-11-10 153 views
2

我正在使用SQL Server 2008 Management Studio。以下是我必須寫的內容,對於第二個約束我有一些困難。這有點讓我困惑,我會很感激一些幫助。SQL Server條件CHECK約束條件

編寫一個ALTER TABLE語句,將兩個新的檢查約束添加到AP數據庫的Invoices表中。第一個應該允許(1)僅當PaymentTotal爲零時PaymentDate爲null,並且(2)僅當PaymentTotal大於零時PaymentDate不爲null。第二個約束應該防止PaymentTotal和CreditTotal的總和大於InvoiceTotal。

這是我到目前爲止,第一個約束起作用但不是第二個(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

第一個改變告訴你必須發生什麼 – xQbert

回答

3

你已經寫了一個沒有參數的聚合函數(SUM())。

「第二個約束應當阻止比InvoiceTotal更大PaymentTotal和CreditTotal的總和」。這是一個有點混亂給我,但在這裏就是你應該將其更改爲:

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 
)