SQL2005写个触发器,来个写例子的。不是讲道理的。

Comeonzhou 2010-12-14 11:14:00
表1 Detail,
表2 Detail_bak
表2是对表1的备份,表2的字段比表1多出了3个字段 :newid,时间,类型标识(插入/修改/删除)
要求:
在表Detail进行插入的时候,对表Detail_bak进行插入操作,时间取当前。类型标识为插入;
在表Detail进行修改的时候,对表Detail_bak进行插入操作,时间取当前。类型标识为修改;
在表Detail进行删除的时候,对表Detail_bak进行插入操作,时间取当前。类型标识为删除。
所有对Detail进行的操作对应的对Detail_bak都是插入。

...全文
125 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]

想讲道理也没有什么可讲,你根本不需要。
[/Quote]

  • 打赏
  • 举报
回复
想讲道理也没有什么可讲,你根本不需要。
Comeonzhou 2010-12-14
  • 打赏
  • 举报
回复
来个写现成答案的、
vrhero 2010-12-14
  • 打赏
  • 举报
回复
自己去看MSDN...道理例子都有...

CREATE TRIGGER (Transact-SQL)

使用触发器
Comeonzhou 2010-12-14
  • 打赏
  • 举报
回复
在线等。
JiuchunYoung 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wggfcusmq 的回复:]
SQL code


------插入-----------
create trigger ti_Detail on Detail after insert
as
if @@rowcount=0 return
set nocount on
insert into Detail_bak(...)
select ...,newid(),getdate(),'insert'……
[/Quote]

都不错 给你答案了 呵呵
Comeonzhou 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
想讲道理也没有什么可讲,你根本不需要。
[/Quote]
不要JJWW,你是牛人又怎么了。我问我的问题 你可以不回答。
Comeonzhou 2010-12-14
  • 打赏
  • 举报
回复
你鄙视个卵 级高了不起啊。
  • 打赏
  • 举报
回复


------插入-----------
create trigger ti_Detail on Detail after insert
as
if @@rowcount=0 return
set nocount on
insert into Detail_bak(...)
select ...,newid(),getdate(),'insert' from inserted
set nocount off

------修改-----------
create trigger tu_Detail on Detail after update
as
if @@rowcount=0 return
set nocount on
insert into Detail_bak(...)
select ...,newid(),getdate(),'update' from inserted
set nocount off

------删除-----------
create trigger td_Detail on Detail after delete
as
if @@rowcount=0 return
set nocount on
insert into Detail_bak(...)
select ...,newid(),getdate(),'delete' from deleted
set nocount off
chen_ya_ping 2010-12-14
  • 打赏
  • 举报
回复
create table sql:

USE [TestDB]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Person](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](30) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

USE [TestDB]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Person_Back](
[name] [varchar](30) NOT NULL,
[backid] [uniqueidentifier] NOT NULL,
[operatetype] [varchar](10) NOT NULL,
[operatetime] [datetime] NOT NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Person_Back] ADD DEFAULT (newid()) FOR [backid]
GO

ALTER TABLE [dbo].[Person_Back] ADD DEFAULT (getdate()) FOR [operatetime]
GO


create trigger sql:

USE [TestDB]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create trigger [dbo].[person_update]
on [dbo].[Person]
after update
as
--记录到person_back中的是update前的值,如果要update后的name值可以使用from inserted
insert into person_back(name,operatetype)
select name,'update' from deleted

GO

USE [TestDB]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create trigger [dbo].[trigger_Person]
on [dbo].[Person]
after insert,delete
as
insert into person_back(name,operatetype)
select name,'delete' from deleted

insert into person_back(name,operatetype)
select name,'insert' from inserted


GO
telankes2000 2010-12-14
  • 打赏
  • 举报
回复
SP大大总是一针见血!
fa_ge 2010-12-14
  • 打赏
  • 举报
回复
太简单了,自己写吧

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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