sql-server - 仅当 Microsoft sql server 中的 t1.f3 为空时,如何允许字段 t1.f1 引用 t2.f2?

标签 sql-server database null constraints ddl

为了简单起见:假设我们有包含这些定义的表:

create table t1 (id int primary key, f1 int references t2(f2), f3 int references t1(id) )

create table t2 (id int primary key, f2 int)

是否可以做一个约束,只允许在 f3 为 null 时设置 f1?这将如何完成?

最佳答案

首先,让我们检查用例并将它们转换为 bool 语句:

  • 如果未设置 f1(即,它为 null),则没有问题,我们不关心 f3。
  • 如果设置了 f1(即,它不是 null),f3 必须是null

这是一个简单的 or 条件 - f1 为 null 或 f3 为 null。一旦我们理解了这一点,添加一个 check 约束就是一件简单的事情:

ALTER TABLE t1 ADD CONSTRAINT t1_chk CHECK (f1 IS NULL OR f3 IS NULL)

关于sql-server - 仅当 Microsoft sql server 中的 t1.f3 为空时,如何允许字段 t1.f1 引用 t2.f2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832321/

相关文章:

php - MySQL 更新无法使用 If 语句

database - 通过 laravel 获取数据透视表中的字段

java - Google 驱动器 getMimeType 仅返回空值

sql - 我应该使用 not exists 还是 join 语句来过滤掉 NULL?

sql-server - 格式化日期以包括星期几

sql - 是否可以找出 SQL Server 中有多少数据库数据早于 N 年?

mysql - 外键循环引用困境

sql-server - 当 SQL Server 连接字符串中未指定端口号时会发生什么情况?

database - 如何修复我的 Magento 安装中的 unsecure_base_url?

php - 从 php 插入 mysql 将日期字段保存为 00 :00:00 instead of NULL