sql-server - SQL Server 组件约束或多于 1 列的约束
问题描述
我想创建一个包含操作细节的表,例如:
CRAETED_ON DATETIME NOT NULL DEFAULT GETDATE(),
CREATED_BY VARCHAR(10) NOT NULL,
DELETED_ON DATETIME NULL,
DELETED_BY VARCHAR(10) NULL
我想把约束IF DELETED_ON
更新然后他们应该提供DELETED_BY
.
两者都应该是 NULL 或者两者都不应该是 NULL 是允许的。一个 NULL 和另一个 NOT NULL 是不允许的。
解决方案
这可以通过表级检查约束来完成,假设您希望约束同时应用于插入和更新:
CREATE TABLE dbo.Example(
CREATED_ON DATETIME NOT NULL DEFAULT GETDATE(),
CREATED_BY VARCHAR(10) NOT NULL,
DELETED_ON DATETIME NULL,
DELETED_BY VARCHAR(10) NULL
,CONSTRAINT IF_DELETED_ON CHECK ((DELETED_ON IS NULL AND DELETED_BY IS NULL) OR (DELETED_ON IS NOT NULL AND DELETED_BY IS NOT NULL))
);
推荐阅读
- java - JMS 1.1 持久订阅 - 无法设置客户端 ID
- node.js - 如何使用 Selenium 和 NodeJS 在 Chrome 上模仿 URL 输入和 ENTER 键
- region - 2sxc 内容应用程序 - 位置 - 如何使用地区/州转换为加拿大和美国地址
- html - 无法将网页页脚居中并使其按窗口比例调整大小
- android - 安装 apk FileProvider
- azure - 在为多容器创建 azure webapp 时传递 azure 容器注册表凭据
- php - 基于购物车项目数量的 WooCommerce 中特定运输类别的购物车消息
- delay - 当有效信号 = 0 Simulink 时暂停输入到使能子系统
- liquibase - 尽管我的解决方案中没有 SQL 脚本,但 Liquibase 更新命令不会从我的数据库中删除元素(表、函数、过程...)
- algorithm - 您可以删除最少多少个括号以使括号序列平衡