视图的触发器怎么做?

Joson.e8love 2015-07-17 02:10:40
现在有视图 数据来自 表A

现在如果A变化 (视图也变)

如果视图变化 那么 更新视图中内容到 表B

这个可以实现?
-------------------------------------------------------------
或者这样说,更新A表 ,A变计算过的数据 形成一个临时表。 这个临时表内容如何更新到表B
...全文
149 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2015-07-17
  • 打赏
  • 举报
回复
视图基本上用替代触发器。
Joson.e8love 2015-07-17
  • 打赏
  • 举报
回复


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


自己搞好了
Joson.e8love 2015-07-17
  • 打赏
  • 举报
回复


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 

。。。。
这样好像不行的,触发器写在视图上
Joson.e8love 2015-07-17
  • 打赏
  • 举报
回复


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 值到另一个表中 这个触发器怎么写
Sql Server 2008 数据库课设报告(图书管理系统) 包一下全部要求,数据库设计完整sql代码: 1.数据库设计 要求数据库设计要合理,对数据库设计作必要的说明并抓图。 数据库名必须与自己真实姓名有关,所有同学不能同名。 图不要太大,看清即可。 2.数据表设计 要求数据表设计要合理,要符合数据库设计的理论范式,对数据表设计作必要的说明并抓图。 数据表名必须与自己真实姓名有关,所有同学不能同名。 3.视图设计 要求根据系统需求作必要的视图设计,如在一次查询中涉及到多个表,应该创建视图。不可以只取一个表的几个字段就算创建视图。 4.索引设计 要求根据系统需求作必要的索引设计,本系统需要的聚集索引、非聚集索引、唯一索引、全文索引等。 5.数据完整性设计 根据系统需求作必要的数据完整性设计,本系统需要的实体完整性体现、域完整性体现、参照完整性体现等。 6.存储过程和触发器设计 根据系统需求作必要的存储过程和触发器设计,本系统需要的存储过程和触发器设计。必要的存储过程和触发器设计都要写全说明,图可以是一个表的完整存储过程或触发器。 7.备份与恢复设计 根据系统需求作必要的备份与恢复设计,如需要对那些内容备份,备份策略、由谁来备份、什么时间备份等。 8.数据库安全设计 根据系统需求作必要的数据库安全设计,如本系统分几级用户、分别是什么角色成员具有什么操作权限等。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧