gpt4 book ai didi

sql - 检查确保 tableA 列中的值小于 tableB 列中的值的约束

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:49 25 4
gpt4 key购买 nike

我正在创建一个数据库,并且我有表 ProjectDetails.TimeCardExp 和 ProjectDetails.Project。 TimeCardExp 表有一列 ExpenseDate,在表 Project 中有一列 EndDate; (它们都接受日期时间数据类型)。我想要做的是对 TimeCardExp 表的 ExpenseDate 列实现约束,以确保在表 TimeCardExp 的 ExpenseDate 列中输入的值小于 Project 表的 EndDate 列中的值,对于同一名员工。

TimeCardExp 表 *TimeCardID*EmployeeID*ProjectID*ExpenseDate

项目表*ProjectID*EmployeeID*EndDate

上面是两个表和一些列,我的任务是确保在 TimeCard.ExpenseDate 中输入的值始终小于同一员工的 Project.EndDate 值。谢谢

最佳答案

如果可以将您想要避免的条件表达为简单的连接(这里似乎就是这种情况),那么只要您创建了一个辅助表,您就可以使用索引 View 以声明方式强制执行此操作。

CREATE TABLE dbo.TwoRows
(
X INT PRIMARY KEY
);

INSERT INTO dbo.TwoRows
VALUES (1), (2)

然后您只需表达不应发生的条件并将其交叉连接到辅助表。

CREATE VIEW TimeCardExpenseDateLessThanProjectEndDate
WITH SCHEMABINDING
AS
SELECT P.ProjectID,
P.EmployeeID,
P.EndDate,
TC.ExpenseDate
FROM ProjectDetails.Project AS P
INNER JOIN ProjectDetails.TimeCardExp AS TC
ON P.ProjectID = TC.ProjectID
AND P.EmployeeID = TC.EmployeeID
AND P.EndDate <= TC.ExpenseDate
CROSS JOIN dbo.TwoRows

GO

CREATE UNIQUE CLUSTERED INDEX IX
ON TimeCardExpenseDateLessThanProjectEndDate(ProjectID,
EmployeeID,
EndDate,
ExpenseDate)

关于sql - 检查确保 tableA 列中的值小于 tableB 列中的值的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com