--创建用于监视对student表进行插入和更新操作的触发器 IFEXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'StudentTest') DROPDATABASE[StudentTest] GO CREATEDATABASE[StudentTest]ON (NAME = N'carTest', FILENAME = N'D:\SqlData\StudentTest.mdf' , SIZE =2, FILEGROWTH =10%) LOGON (NAME = N'carTest_log', FILENAME = N'D:\SqlData\StudentTest_log.LDF' , FILEGROWTH =10%) GO use StudentTest GO ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[student]') andOBJECTPROPERTY(id, N'IsUserTable') =1) droptable[dbo].[student] GO createtable student ( id uniqueidentifierdefaultnewid(), name nvarchar(50), address nvarchar(50), registeDate datetimedefaultgetdate() primarykey(id) ) insertinto student (name,address )values('frj','hunan') insertinto student (name,address )values('hlk','shiquan') insertinto student (name,address )values('hlb','shiquan') --select * from student selecttop2 name ,address from student go ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[InsertRecordTable]') andOBJECTPROPERTY(id, N'IsUserTable') =1) droptable[dbo].[InsertRecordTable] GO createtable InsertRecordTable ( TableName nvarchar(50), --插入数据的表名 NumOfRecord uniqueidentifier, --插入数据的纪录编号 InsertDate DateTimedefaultgetdate(), --插入数据的日期 NumOfCheckpoint nvarchar(50), --检测站编号 ReserveFild1 nvarchar(50), --保留字段1 ReserveFild2 nvarchar(50), --保留字段2 ReserveFild3 nvarchar(50) --保留字段3 ) ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[UpdateRecordTable]') andOBJECTPROPERTY(id, N'IsUserTable') =1) droptable[dbo].[UpdateRecordTable] GO createtable UpdateRecordTable ( TableName nvarchar(50), --插入数据的表名 NumOfRecord uniqueidentifier, --插入数据的纪录编号 UpdateDate DateTimedefaultgetdate(), --插入数据的日期 NumOfCheckpoint nvarchar(50), --检测站编号 ReserveFild1 nvarchar(50), --保留字段1 ReserveFild2 nvarchar(50), --保留字段2 ReserveFild3 nvarchar(50) --保留字段3 ) GO --创建监视插入数据的触发器 ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[student_insert]') andOBJECTPROPERTY(id, N'IsTrigger') =1) droptrigger[dbo].[student_insert] go CREATETRIGGER student_insert ON student FORINSERT AS DECLARE@iduniqueidentifier DECLARE c1 CURSORFOR SELECT inserted.id FROM student, inserted WHERE student.id = inserted.id OPEN c1 FETCHNEXTFROM c1 INTO@id WHILE@@fetch_status=0 BEGIN INSERTINTO InsertRecordTable (TableName,NumOfRecord) VALUES('STUDENT',@id) FETCHNEXTFROM c1 INTO@id END CLOSE c1 DEALLOCATE c1 GO -- Insert some test data rows. deletefrom student where name='frj888'or name='frj999'OR NAME='HAO888'OR NAME='HAO999' INSERT student(name, address) VALUES ('frj888', 'hunan') INSERT student(name, address) VALUES ('frj999', 'shiquan') GO SELECT*FROM student GO SELECT*FROM insertrecordtable GO --创建用于监视对student表进行更新数据的触发器 ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[student_update]') andOBJECTPROPERTY(id, N'IsTrigger') =1) droptrigger[dbo].[student_update] GO CREATETRIGGER student_update ON student FORUPDATE AS IFUPDATE (name) BEGIN DECLARE@iduniqueidentifier DECLARE c1 CURSORFOR SELECT deleted.id FROM student, deleted WHERE student.id = deleted.id OPEN c1 FETCHNEXTFROM c1 INTO@id WHILE@@fetch_status=0 BEGIN INSERTINTO UpdateRecordTable (TableName,NumOfRecord) VALUES('STUDENT',@id) FETCHNEXTFROM c1 INTO@id END CLOSE c1 DEALLOCATE c1 END GO UPDATE STUDENT SET NAME='HAO999' WHERE NAME ='FRJ999' UPDATE STUDENT SET ADDRESS='HAO888' WHERE NAME ='FRJ888' GO SELECT*FROM UpdateRecordTable select*from student GO