触发器:inserted和deleted的问题

558047 2006-06-26 11:17:59
create trigger tri_upTable1 on table1
for update
as
declare @productNoNew varchar(20),@productNoOld varchar(20)
set @productNoOld=(select MproductNo from deleted)
set @productNoNew=(select MproductNo from inserted)
if update(MproductNo)
begin
---
end
我想知道,select MproductNo from deleted这条语句取出的值是当前记录的值么?
inserted或者deleted是否只保存了当前操作的仅一条记录呢?
就是说inserted或者deleted里面任何时候只有一天记录吧?
...全文
334 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangpei2008 2006-06-27
  • 打赏
  • 举报
回复
a 表 和 b表之间没有连接
如果这样 更新多条记录肯定要报错
-----------------------------------------
--To :zjdyzwx(十一月猪) 我上面的语句哪错了,请指教!:)
create table t1(bh int,name varchar(20))
insert t1 select 1,'aaa'
union all select 2,'bbb'
union all select 3,'bbb'
union all select 2,'bbb'
union all select 2,'bbb'


create table t2(bh int,name varchar(20))
insert t2 select 1,'aaa'
union all select 2,'bbb'
union all select 2,'bbb'
union all select 2,'bbb'
union all select 2,'bbb'

go

Create trigger tr_update On t1
for update
as
set xact_abort On
update B set bh=i.bh,name=i.name
from t2 B,inserted i,deleted d
where B.bh=d.bh
set xact_abort OFF
go
update t1 set bh=9 where bh=2 --更新多条bh=2的记录

select * from t1
select * from t2
go
drop trigger tr_update
drop table t1,t2
十一月猪 2006-06-27
  • 打赏
  • 举报
回复
if update(MproductNo)
begin
--update All Detail table
update A
set QiProductNo=B.QiProductNo
From MouldQid A,Inserted B,Deleted C
where QiProductNo=C.QiProductNo
end
============
a 表 和 b表之间没有连接
如果这样 更新多条记录肯定要报错
paoluo 2006-06-26
  • 打赏
  • 举报
回复
樓上觸發器的有一個語法錯誤。

即使改正後,還是會有問題。

如果一次只更新一條紀錄,沒有問題。

但是如果一次更新多條紀錄,觸發器就會報錯。

simonhehe 2006-06-26
  • 打赏
  • 举报
回复
to:paoluo(一天到晚游泳的鱼)
谢谢指点
simonhehe 2006-06-26
  • 打赏
  • 举报
回复
后边的应该没什么问题了

create trigger tri_upTable1 on table1
for update
as
if update(MproductNo)
begin
declare @productNoNew varchar(20),@productNoOld varchar(20)
update MouldQiD set
set @productNoOld=(select MproductNo from deleted)
set @productNoNew=(select MproductNo from inserted)
QiProductNo=@productNoNew where QiProductNo=@productNoOld --这刚才写错了
end
paoluo 2006-06-26
  • 打赏
  • 举报
回复
simonhehe(★★★★★★巴西) ( ) 信誉:85 2006-06-26 11:42:00 得分: 0


select MproductNo from deleted 取出的是当前操作的记录值
inserted或者deleted只保存一条记录


-----------------------------------
亂說。

如果是批量更新,就保存的不是一條紀錄,而批量更新並不少見 。
simonhehe 2006-06-26
  • 打赏
  • 举报
回复
^_^
simonhehe 2006-06-26
  • 打赏
  • 举报
回复
你的执行语句有问题吧
558047 2006-06-26
  • 打赏
  • 举报
回复
执行的语句是这样的
if update(MproductNo)
begin
--update All Detail table
update MouldQiD set QiProductNo=@productNoNew where QiProductNo=@productNoOld --这刚才写错了
end

老大们看看我想实现这个功能,这样写是否恰当?
longwycn 2006-06-26
  • 打赏
  • 举报
回复
应该是正确的了,没问题的。,
simonhehe 2006-06-26
  • 打赏
  • 举报
回复
select MproductNo from deleted 取出的是当前操作的记录值
inserted或者deleted只保存一条记录
wufanglu 2006-06-26
  • 打赏
  • 举报
回复
哎,如何實現:
if update(aFIELD_NAME)
select inserted.aFIELD_NAME = deleted.aFIELD_NAME

意思就是說這個記錄,此字段只能新增、刪除,不能修改
558047 2006-06-26
  • 打赏
  • 举报
回复
执行的语句是这样的
if update(MproductNo)
begin
--update All Detail table
update MouldQiD set QiProductNo=@productNoNew where QiProductNo=@productNoOldend
end

老大们看看我想实现这个功能,这样写是否恰当?
rouqu 2006-06-26
  • 打赏
  • 举报
回复
这个触发器有问题 怎么能把结果集赋给一个变量呢?
inserted/deleted是两个虚拟表 可以理解成内存中的脏表
liangpei2008 2006-06-26
  • 打赏
  • 举报
回复
--这样试一下!
if update(MproductNo)
begin
--update All Detail table
update A
set QiProductNo=B.QiProductNo
From MouldQid A,Inserted B,Deleted C
where QiProductNo=C.QiProductNo
end

27,580

社区成员

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

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