SQL Server 条件 CHECK 约束
Posted
技术标签:
【中文标题】SQL Server 条件 CHECK 约束【英文标题】:SQL Server conditional CHECK constraint 【发布时间】: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)
)
在此先感谢您。
【问题讨论】:
第一个改变告诉你必须发生什么 【参考方案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
)
【讨论】:
以上是关于SQL Server 条件 CHECK 约束的主要内容,如果未能解决你的问题,请参考以下文章
要SQL Server 中约束字段LoginName 只能为英文字符,check 语句怎么写?哪位高手指点一下,
SQL Server创建 学号 性别 课程编号 check约束 主键约束 UNIQUE约束