sql-server - 在 SQL Server 中创建比较日期的触发器

标签 sql-server triggers

我对触发器还很陌生,似乎无法理解它们。假设我这里有两个表:

CREATE TABLE Project 
(
    id INT NOT NULL IDENTITY(1, 1),
    startDate DATETIME,
    endDate DATETIME
);

CREATE TABLE Work 
(
    date DATETIME,
    projectId INT
);

我插入一些数据:

INSERT INTO Project VALUES ('2017-04-18', '2017-05-01'); /*id = 1*/
INSERT INTO Work VALUES ('2017-04-17', 1);

假设只有 1 个项目带有 id = 1 ,这应该进展顺利。但是,我的工作在项目开始前一天开始并没有多大意义(在这种情况下不是)。我将如何创建一个基本上说 date cannot be < startDate OR > endDate 的触发器?

最佳答案

像这样的东西应该可以工作:

CREATE TRIGGER t_CheckInterval ON dbo.Work
   AFTER UPDATE, INSERT
AS 

IF NOT EXISTS (
    --if no records are returned then work date lies outside the project
    -- (start, end) interval
    SELECT 1
    FROM inserted AS i
    JOIN Project AS p 
       ON p.Id = i.projectId AND i.[date] BETWEEN p.startDate AND p.endDate 
)
BEGIN
    RAISERROR ('Error: Your error message here.', 16, 1)
    ROLLBACK TRANSACTION
END

GO

关于sql-server - 在 SQL Server 中创建比较日期的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43479197/

相关文章:

如果 XML 列包含具有值的元素,则 SQL Server XQuery 选择记录

c# - 我怎么知道数据库的实际地理位置?

mysql - 多个 SQL 触发器中的 If 语句

sql - 如何记录SQL Server代理作业的成功和失败

sql-server - 添加新列并设置外键关系

mysql - sql中的不同表可以使用相同的外键吗

mysql - 如何使用 liquibase 和 mysql 修复 SQL 语法错误来创建触发器

sql-server - 如何自定义 Visual Studio 生成的 SQL 脚本

php - 从 MySQL 触发器调用 PHP 脚本

postgresql - 将 UPDATE 传播到动态确定的表