如何创建调用有参数存储过程的触发器,当更新视图的某一字段的值为1时触发。

formine 2003-08-29 04:29:43
有一个存储过程PWriteOff,参数是RefID int
有一个视图Table,其中PaidFlag bit,RefID int
想对Table创建一个存储过程,如果更新PaidFlag=1时,调用PwriteOff,但这个存储过程RefID的值却是Table被更新行的RefID
如果当成批更新PaidFlag时,临时表Inserted的记录是不是也是一批记录的啊?还是一条更新完了再一条更新(即Inserted在一个时刻是只有一条记录的吗?)
如何创建该存储值过程?
...全文
53 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
formine 2003-08-29
  • 打赏
  • 举报
回复
其中对于当前库来说,Table1和Table2都是视图来的。我后来在物理表Table1的数据库上创建基于表的触发器就可以解决了那个更新的问题,因为我在分布式视图上更新一个视图,在物理表上也是会解发更新动作的,这时更新动作就会触发。
formine 2003-08-29
  • 打赏
  • 举报
回复
存储过程大概是这样子的

INSERT INTO Table2.A
SELECT Table1.A
FROM Table1
WHERE Table1.RefID=@RefID

DELETE Table1 WHERE Table1.RefID=@RefID
pengdali 2003-08-29
  • 打赏
  • 举报
回复
你的过程的代码?
formine 2003-08-29
  • 打赏
  • 举报
回复
谢谢高手们,很开心得到你们的帮助,我一开始本来是不想用游标,事实上的确需要用到。还有,使用了Instead触发,那是不是更新这个视图Table的PaidFlag字段时,更新就不成功,而触发了Instead触发器?如果真是这样的话,我如何更新这个视图Table的PaidFlag字段?还有,如果批更新一共有10000条记录,使用游标对速度影响大吗?
txlicenhe 2003-08-29
  • 打赏
  • 举报
回复
批更新时,inserted表也是一批记录。
caiyunxia 2003-08-29
  • 打赏
  • 举报
回复
是一批记录
如果用过程,必须有游标
pengdali 2003-08-29
  • 打赏
  • 举报
回复
CREATE TRIGGER 名 on 视图Table
INSTEAD OF update
AS
BEGIN
declare cursor_insert cursor for select RefID from inserted where paidflag=1
declare @i int
open cursor_insert
fetch cursor_insert into @i
while @@fetch_status=0
begin
exec PWriteOff @i
fetch cursor_insert into @i
end
close cursor_insert
deallocate cursor_insert
END
go
pengdali 2003-08-29
  • 打赏
  • 举报
回复
CREATE TRIGGER 名 on 视图Table
INSTEAD OF update
AS
BEGIN
declare cursor_insert cursor for select c# from inserted where paidflag=1
declare @i int
open cursor_insert
fetch cursor_insert into @i
while @@fetch_status=0
begin
exec PWriteOff @i
fetch cursor_insert into @i
end
close cursor_insert
deallocate cursor_insert
END
go

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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