#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
)