Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有聚合函数的SQL循环更新和更新后触发器_Sql_Sql Server_Database_Stored Procedures - Fatal编程技术网

带有聚合函数的SQL循环更新和更新后触发器

带有聚合函数的SQL循环更新和更新后触发器,sql,sql-server,database,stored-procedures,Sql,Sql Server,Database,Stored Procedures,我有更新语句和更新后触发器。Update语句发生在循环中,当我没有在触发器上使用聚合函数或select时,触发器工作正常。当我放置聚合函数或select时,触发器将获取最后插入的值并更新与给定条件匹配的所有行 ALTER TRIGGER UpdateGrossPay ON DailyClocking AFTER UPDATE AS UPDATE Daily SET GrossPay=(SELECT PayRate FROM inserted WHERE Daily.ClockDate=inser

我有更新语句和更新后触发器。Update语句发生在循环中,当我没有在触发器上使用聚合函数或select时,触发器工作正常。当我放置聚合函数或select时,触发器将获取最后插入的值并更新与给定条件匹配的所有行

ALTER TRIGGER UpdateGrossPay
ON DailyClocking
AFTER UPDATE
AS
UPDATE Daily
SET GrossPay=(SELECT PayRate FROM inserted WHERE
Daily.ClockDate=inserted.ClockDate)

GO
我需要select语句,因为我必须对其使用聚合函数 这个函数是

SET GrossPay=((SELECT (sum(datediff(minute, 0,inserted.TotalHours))) / 60.0
FROM inserted WHERE Daily.ClockDate=inserted.ClockDate)*(SELECT PayRate from inserted))
帮我做这个。对不起,我是新手

编辑

ALTER TRIGGER UpdateGrossPay
每日锁定上的
更新后的
AS
声明@rs int
SET@rs=10

updatedailyclocking
SET GrossPay=@rs*PayRate
GO

这不需要条件来更新。任何一行更新后,触发器都将使用该行的付款率更新同一行。此触发器工作正常

编辑2

ALTER TRIGGER GrossPay
每日发布
更新后的
AS

每日更新
SET GrossPay=(datediff(分钟,0,每日.TotalHours)/60.0)*每日.PayRate
来自每日,插入
其中
Daily.ClockDate=inserted.ClockDate
Daily.HId=inserted.HlId

Daily.RId=inserted.RId

如果您更新了多条记录,您的触发器将在“inserted”表中触发多行,因此您必须使用inserted DailyClocking连接Daily表。 在触发器中,始终假定您将在中插入和删除多条记录。 例如(也许您应该在员工id上添加一个联接或其他精确的内容)


…更新与给定条件匹配的所有行
条件在哪里?触发器将更新表中的所有行。实际上,它应该更新所有行,但它应该采用相同的行值,而不是最后一次插入。否,不应该。触发器更新所有表的插入次数。请检查我的编辑是否正常工作,但当我将select设置为notNo时,它不可能为真。触发器中的Update语句将更新
DailyClocking
中的所有行。正确。触发器按SQL语句触发,而不是按行触发。出现错误
Msg 157,级别15,状态1,过程GrossPay,第10行UPDATE语句的集合列表中可能不会出现聚合。
是的,我刚刚粘贴了您的代码,当然,使用sum()您必须添加一个group by,但现在已经是TotalHour了,我认为它是不需要的,你可以删除它。我更正了我的回答,但我没有加入,请检查我帖子上的编辑,我还有一个问题,我会在你的评论后问你,谢谢。看起来不错,我不能告诉你的加入字段,因为我不知道你的数据,我也不喜欢旧的加入语法,因为它不像ansi加入那样清晰地显示加入,但这当然是个人偏好:)
UPDATE Daily
SET GrossPay= (datediff(minute, 0,inserted.TotalHours) / 60.0 ) * PayRate 
FROM Daily
INNER JOIN INSERTED on Daily.ClockDate=inserted.ClockDate
and Daily.someId = inserted.SomeId  -- perhaps add some id here ? (employee or other)