REATE TRIGGER tr_test
ON dbo.a
FOR UPDATE
AS
BEGIN
delete b where b.a in(select a from deleted)
insert into b select * from inserted
END
GO
ON dbo.a
FOR UPDATE
AS
BEGIN
delete b where b.a in(select a from deleted)
insert into b select * from inserted
END
GO
解决方案 »
- GUID、varchar2个类型,在那种类型上建立索引查询效率更高?
- 请问是否有必要在外键字段再建立索引?
- powerdesigner11连接SQLServer2000的问题?
- 初学SQL请教存储过程
- 相同传入参数是否为空分类查询结果出错,大家帮忙看看,很简单的问题
- 怎么样最高效率地把0004,0056,1564前面的0去掉?
- 怎样将表中数据导出,形成insert into 表名 values(...)这样的语句?
- 如何在sql 2000中,强制使用一个索引。急急。谢谢高手。
- SQL命令可否浏览全部的数据,而光标或当前项是指定的项
- 一个有些复杂的问题。关于sql2000的(分数不够可以增加)
- 修改表字段类型的语句怎么写啊
- 救教.ASP在MSSQL里查找当前一周的所有数据库如何现实?
ON dbo.a
FOR UPDATE
AS
update b set a = (select top 1 a from inserted)
where b.a = (select top 1 a from deleted)
我并不是要这种效果的,我只是想知道,如果我要更新的列是主键,而且可能会影响多行,如何在触发器中获取某一行更新前的值和对应的更新后的值.把上面的例子附加条件,b表的b列和a表的a值相同道德b列值不同,请教该如何处理?
ON dbo.a
FOR UPDATE
AS
update b set a=I.a
from b
join deleted D on D.a=b.a
join inserted I on D.唯一标识列=I.唯一标识列
go
按你那种模式必须要保证deleted inserted中同次序的列互相对应,而且好像要用游标逐条更新,不知道是不是这样,当然也非常感谢你的建议,我想知道有没有其它办法
ON dbo.a
FOR UPDATE
AS
UPDATE b
SET
a = e.new_a
FROM
b,
(select
distinct new_a = i.a,old_a = b.a
from
inserted i,deleted d
where
i.b = d.b) e
where
b.a = e.old_a
GO