关于触发器!!高分求解!!

linshl 2003-12-04 11:05:39
想利用触发器,建一个临时表关联主表里的最新10条记录值,
就是当一个表的最新插入一个值,这个临时表也插入这个值,不过只保留最新的10条,这个临时表是利用触发器更新呢,还是插入呢!!

或者不利用触发器,asp有没更好的解决办法!!??
...全文
37 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
linshl 2003-12-05
  • 打赏
  • 举报
回复
问题已经解决,,谢谢各位老大,
现在给你们加分
linshl 2003-12-05
  • 打赏
  • 举报
回复
CREATE trigger linshi_insert on nameb
for update,insert
as
insert into linshi(a2,b2,c2) select a,b,c from inserted
delete top 1 * from linshi order by id asc

这个语法为什么说top附近有错误,
我要删除临时表里的最早一条记录,
linshl 2003-12-05
  • 打赏
  • 举报
回复
insert 临时表 (数据,修改时间) select select 数据,getdate() from inserted

我这里用了两个select的时候,检查语法就出错了,所以我才用了一个!
不过其他地方不会写错的!
pengdali 2003-12-05
  • 打赏
  • 举报
回复
CREATE TRIGGER 名 ON 你的表
FOR UPDATE,insert
AS
insert 临时表 (数据,修改时间) select select 数据,getdate() from inserted
delete 临时表 where 修改时间 not in (select top 10 修改时间 from inserted where 修改时间 is not null order by 修改时间 desc)
go
teaism 2003-12-05
  • 打赏
  • 举报
回复
zjcxc(邹建)的测试结果都在那了,应该是你自已写错了。
teaism 2003-12-05
  • 打赏
  • 举报
回复
linshl(闲野): 你也许写错了。会不会把“NOT IN” 写成IN呢?
teaism 2003-12-05
  • 打赏
  • 举报
回复
噢!zjcxc(邹建) 已经是对的了,我没仔细看。SORRY!
linshl 2003-12-05
  • 打赏
  • 举报
回复
也一样的,我最初就是用id好来的
可是他会把临时表里的所以记录给删了的!
就是select top 10 不起作用
teaism 2003-12-05
  • 打赏
  • 举报
回复
上面粘贴大力的粘贴错了!修改一下:

修改时间可能会相同的。那样写触发器不够严密。
你加一个标识列。

alter table 临时表 add id int identity

CREATE TRIGGER 名 ON 你的表
FOR UPDATE,insert
AS
insert 临时表 select select * from inserted
delete 临时表 where ID not in (select top 10 ID from 临时表 order by ID desc)

go
teaism 2003-12-05
  • 打赏
  • 举报
回复
修改时间可能会相同的。那样写触发器不够严密。
你加一个标识列。

alter table 临时表 add id int identity

CREATE TRIGGER 名 ON 你的表
FOR UPDATE,insert
AS
insert 临时表 select select * from inserted
delete 临时表 where ID not in (select top 10 ID from inserted order by ID desc)

go

linshl 2003-12-05
  • 打赏
  • 举报
回复
楼上的,,为什么top10不起作用,,会把临时表的记录都给删了,,
他只会判断跟插入的这条记录时间,
如果把临时表里时间该为跟刚插入的一样,就不会被删了!
pengdali 2003-12-04
  • 打赏
  • 举报
回复
CREATE TRIGGER 名 ON 你的表
FOR UPDATE,insert
AS
insert 临时表 (数据,修改时间) select select 数据,getdate() from inserted
delete 临时表 where 修改时间 not in (select top 10 修改时间 from inserted order by 修改时间 desc)
go
zjcxc 2003-12-04
  • 打赏
  • 举报
回复
--用触发器就行了.

--创建测试表
create table 表 (a int)
go
--创建触发器
create trigger t_insert on 表
for insert
as
insert into #t select * from inserted
delete from #t where id not in(select top 10 id from #t order by id desc)
go

--创建保存数据的临时表
create table #t(id int identity(1,1),a int)
insert into 表
select top 10 id from sysobjects order by newid()

insert into 表
select top 10 id from sysobjects order by newid()

--显示结果
select * from #t

go
--删除测试表
drop table 表,#t

/*--测试结果
id a
----------- -----------
11 782625831
12 1998630163
13 834102012
14 1822629536
15 331148225
16 3
17 123147484
18 6
19 19
20 12
--*/
CrazyFor 2003-12-04
  • 打赏
  • 举报
回复
做个视图就行了,

select top 10 * from 表 order by id desc
ghosthjt 2003-12-04
  • 打赏
  • 举报
回复
可以用触发器解决,但不要用临时表,因为临时表的生存周期可能不能满足要求。控制10条的方法是为每条记录加一个字段表示它的加入时间,然后是要插入一条记录,则先删除日期最早的一条(当然要在总记录数超过10条的)
pengdali 2003-12-04
  • 打赏
  • 举报
回复
create table 表 (a int)
go
insert 表 values (1)
go
CREATE TRIGGER 名 ON 表
FOR UPDATE
AS
select a 更新前被删除的数据 from deleted
select a 更新后被插入的数据 from inserted
go
------------测试:
update 表 set a=3
银狐被占用 2003-12-04
  • 打赏
  • 举报
回复
可以用触发器实现。不过你的这个临时表最好做成实在存在的表。

在插入主表记录时同时用触发器插入到关联表中。在关联表上建一插入触发器用来删除
排完序中最旧的记录!
victorycyz 2003-12-04
  • 打赏
  • 举报
回复
create trigger A
on tablename
for insert
as

declare @lR long

set @lR=count(*) from #t
if @lR=10
begin
delete a from #t a,(select min(timefield) as tf from #t ) b where a.timefield=b.tf
end
insert into #t select * from inserted

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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