SQL 表增删改触发器

新建表Test表,Test_TriLog历史表(存放对Test表操作的记录)

CREATE TABLE [dbo].[Test](
	[Id] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY,
	[Name] [NVARCHAR](10) NULL,
	[Sex] [NVARCHAR](10) NULL)

CREATE TABLE [dbo].[Test_TriLog](
    [LogId] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY,
	[TriOn] DATETIME NULL,
	[TriOp] NVARCHAR(50) NULL,
	[Id] [INT] NOT NULL,
	[Name] [NVARCHAR](10) NULL,
	[Sex] [NVARCHAR](10) NULL)
CREATE TRIGGER [dbo].[tr_Test_All]
   ON  [dbo].[Test]
   AFTER DELETE, INSERT, UPDATE
AS 
BEGIN
	--修改的触发器
	--1 delete 2 insert
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	declare @TriOP nvarchar(50)
	--新增
	if exists(select 1 from inserted) and not exists(select 1 from deleted)
	BEGIN
		-- Insert statements for trigger here
		set @TriOP='Insert'
		INSERT INTO [Test_TriLog]([TriOn],[TriOp],[Id],[Name],[Sex])
		SELECT GETDATE(),@TriOP,[Id],[Name],[Sex] FROM inserted
		
	END
	ELSE if exists(select 1 from deleted) and not exists(select 1 from inserted)
	BEGIN
		--删除
		set @TriOP='Delete'
		INSERT INTO [Test_TriLog]([TriOn],[TriOp],[Id],[Name],[Sex])
		SELECT GETDATE(),@TriOP,[Id],[Name],[Sex] FROM deleted
		
	END	
	ELSE IF  exists(select 1 from deleted) and exists(select 1 from inserted)
	BEGIN
		--更新
		set @TriOP='Update'
		INSERT INTO [Test_TriLog]([TriOn],[TriOp],[Id],[Name],[Sex])
		SELECT GETDATE(),@TriOP,[Id],[Name],[Sex] FROM inserted
	END
END

你可能感兴趣的:(SQL)