Условное CHECK-ограничение SQL Server - PullRequest
2 голосов
/ 10 ноября 2011

Я использую SQL Server 2008 Management Studio. Ниже то, что я должен написать, и у меня есть некоторые трудности для второго ограничения. Это немного смущает меня, и я был бы очень признателен за помощь.

Напишите инструкцию ALTER TABLE, которая добавляет два новых проверочных ограничения в таблицу Invoices базы данных AP. Первое должно позволять (1) PaymentDate быть нулевым, только если PaymentTotal равен нулю, и (2) PaymentDate должно быть не нулевым, только если PaymentTotal больше нуля. Второе ограничение должно препятствовать тому, чтобы сумма 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)
)

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Вы написали статистическую функцию (SUM()) без параметров.

"Второе ограничение не должно допускать, чтобы сумма 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
2 голосов
/ 10 ноября 2011
...
ADD CHECK (
    PaymentTotal + CreditTotal <= InvoiceTotal
)
...