Microsoft SQL Server:触发以检查由另一个字段分组的一个字段的总和是否不超过特定值?

路易斯·阿塞图诺(Luis Aceituno)

我有一张桌子,一个人每天可以记录几个小时:

|__person__|__day__|__hours__|
|   1      |  1    |   4     |
|___2______|__1____|___2_____|
...

我想创建一个触发器,该触发器不允许特定日期的单个人的小时总和大于特定值,例如24

可以在多天同时插入多行,然后触发器应检查每个人的每一天仍然有有效的小时数。

我曾尝试在此处阅读文档和类似问题,但未能解决此问题,并且对SQL Server的经验很少。

任何帮助,将不胜感激!

马里

为此,您将需要一个用户定义的函数,并使用该用户定义的函数创建一个约束,例如...

用户定义功能

CREATE FUNCTION dbo.get_TotalHoursRemaining  (
                                                @PersonID INT 
                                              , @Day      INT
                                              )
RETURNS INT 
AS
BEGIN
    Declare @Hours INT 

SELECT @Hours = ISNULL(SUM([HOURS]), 0)
FROM Test_Table
WHERE Person = @PersonID
AND   [DAY] = @Day
GROUP BY Person , [DAY] 

  SET @Hours = 24 - @Hours;
 RETURN @Hours;
END

约束

ALTER TABLE Test_Table
ADD CONSTRAINT chk_hours_remaining 
       CHECK (((dbo.get_TotalHoursRemaining(Person , [Day])) >= 0))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

一个字段的Oracle SQL计数由另一个字段分组

SQL:基于另一个字段的值的条件字段输出

SQL查询以获取一个字段为另一个特定字段重复的次数

给定另一个字段的值,SQL 创建一个新的字段会话

计算由另一个字段oracle sql数据库分组的每个字段中的非空白条目数

如何将 SQL 查询中一个字段的值用于 Oracle Apex 上另一个字段的值列表?

sql-选择为一个字段记录相同的值,在另一个字段上记录不同的值

SQL仅根据另一个字段的值过滤一个字段的某些值

Sql server Pivot并从一个字段创建多个记录并拆分另一个字段

如何将数据从一个字段复制到SQL Server中不同行中的另一个字段

SQL选择一个字段等于另一个字段,但中间有一个附加字符的地方

SQL更新字段基于另一个字段的条件

SQL触发器以将字段值“移动”到同一表上的另一个字段

使用SQL根据记录中的另一个字段检索组合记录的字段值

SQL Server添加价格,数量与“分组依据”相同的ID,但在“分组依据”中具有另一个字段

SQL:DATEDIFF如果开始日期大于另一个字段中的日期

将SQL表ID转换为PHP中的另一个字段

SQL:如果一个字段为空或为0,则选择另一个字段

如果第一个字段中有字母,SQL 如何加入另一个字段

SQL WHERE 条件是一个字段的字符串可以在另一个字段中找到

如何按数字 ASC 排序但强制从 SQL 中的另一个字段排序相同的值?

每小时分组需要与以前的小时数据相加,并与SQL Server中的另一个字段相减

如何将一个字段中的日期与另一个字段中的时间结合在一起-MS SQL Server

SQL:从表字段生成字符串并存储到另一个字段

SQL Server-从同一视图表中的其他字段创建值一个字段

如何使用另一个字段的值对 Oracle Apex 表单中的字段中的默认值进行 sql 查询?

SQL Server - 如果该字段已被透视,如何通过另一个字段再次透视?那数据库设计正确吗?

SQL Regex-用另一个字段的子字符串替换

当另一个字段位于GROUP BY中时,SQL查询的WHERE大于计数