2011-11-10 126 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 
)