【问题标题】:Unique constraint using SQL Server CAST([column] AS DATE) function使用 SQL Server CAST([column] AS DATE) 函数的唯一约束
【发布时间】:2018-12-21 10:27:49
【问题描述】:

我有一个appointments 表,其中有一个[personid] 和一个[appdate] 数据类型为datetime(2) 的列。我想添加一个约束,以防止任何personid 在任何一天获得多个约会。

我试过了,但是没用

ALTER TABLE dbo.tblappointments
    ADD CONSTRAINT SingleApp UNIQUE (PersonID, CAST(Appdate AS DATE))

谢谢。

【问题讨论】:

    标签: sql sql-server date unique-constraint


    【解决方案1】:

    我想你可以创建一个计算列并将其用作索引。

    ALTER TABLE dbo.tblappointments ADD AppointmentDay as CAST(Appdate AS DATE) PERSISTED
    

    如果不使用PERSISTED,则每次访问该列时都会计算该值

    【讨论】:

    • 不需要标记为PERSISTED。无论如何,它都会在唯一索引中为 PERSISTED
    • @MartinSmith 正确。忘了这个想法是有一个唯一的索引。但我的习惯是总是在需要时让 CT Persisted。
    • 谢谢,这会起作用,但是,我更喜欢一种不会浪费存储空间的方法。我尝试使用用户定义的函数来检查 personid 在某一天是否有约会并将该函数用作检查约束,但我也无法做到这一点。
    • @SchwanAbdulkareem - 只是不要将列标记为持久。然后,它的工作方式与您问题中的语法大致相同(如果支持)
    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2011-06-27
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多