【问题标题】:SQL Server conditional CHECK constraintSQL Server 条件 CHECK 约束
【发布时间】:2011-11-10 14:13:31
【问题描述】:

我正在使用 SQL Server 2008 Management Studio。以下是我必须写的内容,第二个约束我遇到了一些困难。这让我有点困惑,我非常感谢一些帮助。

编写一个 ALTER TABLE 语句,将两个新的检查约束添加到 AP 数据库的 Invoices 表中。第一个应该允许 (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)
)

在此先感谢您。

【问题讨论】:

  • 第一个改变告诉你必须发生什么

标签: sql sql-server sql-server-2008 tsql alter-table


【解决方案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

【讨论】:

  • 非常感谢您对查询的帮助。我真的很感激。再次感谢
【解决方案2】:
...
ADD CHECK (
    PaymentTotal + CreditTotal <= InvoiceTotal
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多