Ограничение условной ПРОВЕРКИ SQL Server

#sql #sql-server #sql-server-2008 #tsql #alter-table

#sql #sql-сервер #sql-server-2008 #tsql #alter-table

Вопрос:

Я использую 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)
)
  

Заранее благодарю вас.

Комментарии:

1. Первое изменение сообщает вам, что должно произойти

Ответ №1:

Вы написали агрегатную функцию ( 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
  

Комментарии:

1. Большое вам спасибо за помощь с этим запросом. Я действительно ценю это. Еще раз спасибо

Ответ №2:

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