27,579
社区成员
发帖
与我相关
我的任务
分享
USE [HR_Digital]
GO
/****** Object: Trigger [dbo].[Sp_UpdateAttendenceRaw] Script Date: 07/17/2015 13:34:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: JosnJiang
-- Create date: 2015-07-16
-- Description: 考勤机数据同步更新HR
-- =============================================
ALTER TRIGGER [dbo].[Sp_UpdateAttendenceRaw]
ON [dbo].[AttendenceRawData]
FOR INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
DECLARE @MYTABLE TABLE
(
ID INT IDENTITY(1,1) NOT NULL,
EmpID VARCHAR(20),
EmpName VARCHAR(20),
FirsrBrushCardTime datetime,
LastBrushCardTime datetime
)
INSERT INTO @MYTABLE
(
EmpID,
EmpName,
FirsrBrushCardTime,
LastBrushCardTime
)
SELECT a.EmpID, a.EmpName, MIN(a.BrushCardTime) AS FirsrBrushCardTime, MAX(a.BrushCardTime) AS LastBrushCardTime
FROM dbo.AttendenceRawData a ,inserted i
WHERE (DATEDIFF(d, a.CreateTime, GETDATE()) = 0)
GROUP BY a.EmpID, a.EmpName
DECLARE @FirsrBrushCardTime datetime, @LastBrushCardTime datetime
set @FirsrBrushCardTime= (select FirsrBrushCardTime from @MYTABLE a, inserted where a.EmpID=inserted.EmpID)
set @LastBrushCardTime= (select LastBrushCardTime from @MYTABLE a , inserted where a.EmpID=inserted.EmpID)
UPDATE [HR_Digital].[dbo].[Attendance]
SET [HR_Digital].[dbo].[Attendance].[StartTime] = @FirsrBrushCardTime
,[HR_Digital].[dbo].[Attendance].[EndTime] = @LastBrushCardTime
From [Attendance],@MYTABLE, inserted
Where [Attendance].EmpID = inserted.EmpID
and DATEDIFF(d,workday,GETDATE())=0
END
自己搞好了
Alter TRIGGER [dbo].[Sp_UpdateAttendenceRaws]
ON [dbo].[View_BrushCard]
instead of INSERT
AS
BEGIN
UPDATE [HR_Digital].[dbo].[Attendance]
SET [HR_Digital].[dbo].[Attendance].[StartTime] = i.FirsrBrushCardTime
From [Attendance], inserted i
Where [Attendance].EmpID = i.EmpID
and DATEDIFF(d,workday,GETDATE())=0
。。。。
这样好像不行的,触发器写在视图上
select EmpID,EmpName
--,DeviceName
, min(BrushCardTime) as FirsrBrushCardTime
, max(BrushCardTime) as LastBrushCardTime
from AttendenceRawData
where DATEDIFF(d, CreateTime,GETDATE())=0
group by EmpID,EmpName
--,DeviceName--,[Type]
--order by BrushCardTime
考勤机 数据,这是每次打开记录。
我现在想 如果 有数据 插入,就更新这个数据 最早的一条和最新的一条到 另一个表中。
也就是 AttendenceRawData 表有变化 就更新 FirsrBrushCardTime , FirsrBrushCardTime 值到另一个表中
这个触发器怎么写