一个表中的列之间的 SQL Server 限制

标签 sql sql-server

我有下表:

 create table Person(
    FName varchar(15) not null
    ,LName varchar(25) not null
    ,Address varchar(100)
    ,City varchar(30)
    ,State varchar(30)
    ,Zip varchar(10)
    ,Phone varchar(15)
    ,Email varchar(60) unique
    ,UserID varchar(30)
    ,Password varchar(30) not null
    ,CCtype varchar(8)
    ,CCNumber varchar(16)
    ,primary key(UserID)        
);

而且我想写一个限制,如果有CCNumber,CCType不能为空。反过来就好了。如果我有类型,我可能没有数字,那没关系。 我已经尝试了这些约束,但在我测试时两者都没有按预期工作。

,constraint CCNumber_no_CCType check((CCNumber is null) or (CCType is null))

,constraint CCNumber_no_CCType check((CCNumber is not null) and (CCType is null))

最佳答案

你想要的约束是:

constraint CCNumber_no_CCType check((CCNumber is null) or (CCType is not null))

这是一种更通用的思考方式。如果您有“如果 A --> B”,那么当 B 为真或 A 不为真时,这为真。

关于一个表中的列之间的 SQL Server 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265021/

相关文章:

c# - 如何在不使用 Entity Framework 的情况下使用 ASP NET MVC5 显示 SQL Server 中的表?

sql - PostgreSQL:在填充为 json 数组的 JSONB 列中按 json 属性搜索

php - 插入到带有注册表单的多个表中

SQL 选择主记录并显示每个主记录的详细记录数

sql - 优化 SQL 查询以避免哈希匹配(聚合)

sql - RAISERROR 引发替换参数错误

sql-server - 无法使用 Tableau Online 连接到 Microsoft SQL Server

mysql - Row_number 语法错误(Wordpress)

mysql - 如何对包含子句 "order by"、 "desc"和 "Limit"的多个列使用 distinct

sql - 死锁:插入与从多个表中选择。快照隔离?