inserted和deleted(200分)

  • 主题发起人 主题发起人 mech
  • 开始时间 开始时间
M

mech

Unregistered / Unconfirmed
GUEST, unregistred user!
对于SQL SERVER7。0,如果用UPDATE一次更改多条
记录,在触发子中,INSERTED和DELETED表中同时
有多条记录,INSERTED和DELETED中的记录是不是可
以对应?也就是说:对原表中的记录,如何在INSERTED
中找到对应记录?

 
如果表有主码,则通过主码对应就可以了。
 
如果主码也更改了呢?
 
建立 Identity 型的主键啊。
 
主码更改没有关系,你的deleted存储的是修改之前的值,
也就是可以看到“原”记录,而inserted是修改之后的内容,
你可以查询你关心的字段,就知道那些字段被修改了。

具体的例子可以看看t-sql帮助,我觉得写的还可以。
 
UPDATE 可以看成是先 DELETE 后 INSERT,所以INSERTED 表中保留新值
DELETED表中保留旧值.
 
那就应该在DELETED表中找原有的记录
 
同意温柔一刀。
可以在TRIGGER中使用INSERTED引用新值,用DELETED引用旧值。
找一本介绍SQL*SERVER高级开发的书中会有详细说明的。
 
To 温柔一刀:
mech 的意思可能是想在 Inserted 和 Deleted 之间建立对应关系。
如果主关键字也改动了,的确是没有办法对应,只有使用 Identity 型字段做主码。
 
to Bakubaku:
那也只需要加一个identity字段就可以了,用不着把他做主码。
 
That's all right.
 
我的意思正如BaKuBaKu所说,找INSERTED和DELETED的
对应关系。
 
>>我的意思正如BaKuBaKu所说,找INSERTED和DELETED的
对应关系。

那应该结束啦。
 
updated、inserted中记录数相同,次序相同.
select updated.column1,inserted.column1 as column2 into table1
from updated,inserted where updated.id=inserted.id
sql server7中是否有系统默认的纪录数(such as identitycol),
用来代替上式中的id呢?
 
mech:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
DECLARE @ItemC Char(8), @Quant Real
DECLARE Imtemp CURSOR LOCAL FOR SELECT ItemC, Quant From Deleted

OPEN Imtemp
FETCH NEXT FROM Imtemp INTO @ItemC, @Quant
WHILE @@FETCH_STATUS = 0
BEGIN
//Do Something
FETCH NEXT FROM Imtemp INTO @ItemC, @Quant
END
CLOSE Imtemp
DEALLOCATE Imtemp
RETURN

 
多人接受答案了。
 
后退
顶部