【问题标题】:ADD CONSTRAINT on date part of a datetime column在日期时间列的日期部分添加约束
【发布时间】:2021-03-27 08:23:08
【问题描述】:

我想在多个列上添加唯一约束。通常,以下脚本应该可以完成这项工作:

CREATE UNIQUE INDEX uq_yourtablename
  ON dbo.yourtablename(column1, column2);

如果 columns2 是 DateTime 并且我们只想在日期部分设置约束呢? 一种解决方案可能是使用触发器,但我需要避免这种情况。

【问题讨论】:

    标签: sql sql-server datetime date-arithmetic unique-index


    【解决方案1】:

    您可以使用计算列虚拟存储日期时间列的日期部分,并将其用于唯一索引。

    create table yourtablename (
        column1 int, 
        column2 datetime, 
        column2_dt as convert(date, column2)
    );
    
    create unique index uq_yourtablename on yourtablename(column1, column2_dt);
    

    【讨论】:

    • 不错的方法。我得到表 Y 中的列 X 的类型对于用作索引中的键列无效。
    • @Kamran:这是一个 db fiddle:dbfiddle.uk/…。即使在旧的 SQL Server 版本 (2014) 中,这似乎也可以正常工作。
    • 已修复。与此无关。我们如何从唯一索引中排除空值?
    • 我只需要添加 WHERE PaymentReference IS NOT NULL
    猜你喜欢
    • 2015-05-19
    • 2013-01-22
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2017-09-04
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多