视图触发器问题???

lanfanghelanfanghe 2004-09-22 10:34:10
我建立了一个远程数据库表的视图,我如何写这个视图的触发器

使得当远程数据库改变的时候,执行相应视图的触发器

如下例子:
create TRIGGER SAL_AccountInfo_v1_iud ON [dbo].我的视图
instead of insert ,delete ,update
AS
select Account_code,Account_name into #i from inserted
select Account_code,Account_name into #d from deleted
exec('delete from 目标表 where exists(select * from #d where Account_code=目标表.cCusCode)')
exec('insert into 目标表 (cCusCode,cCusName) select * from #i')
go

上面例子,只是改变视图时,才能改变目标表
但是我想,当改变源表的时候,就改变目标表

如何解决!!!!!!!
...全文
164 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanfanghelanfanghe 2004-09-23
  • 打赏
  • 举报
回复
谢谢!
zjcxc 元老 2004-09-23
  • 打赏
  • 举报
回复
create TRIGGER SAL_InterPackList_iud ON [dbo].SAL_InterPackList
for insert ,delete ,update
AS
declare @expr1 varchar(200)
set @expr1 = 'OPENROWSET(''SQLOLEDB['',
''[DRIVER={SQL Server};SERVER=10.1.1.2;UID=id;PWD=id'',
mem.dbo.xxx)'
select Account_code,Account_name into #i from inserted
select Account_code,Account_name into #d from deleted
exec('delete a from '+ @expr1+' a where exists(select * from #d where Account_code=a.cCusCode)')
exec('insert into '+@expr1+' (cCusCode,cCusName) select * from #i')
go
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
邹大哥,是不是应该向上面那样写?
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
目标库是10.1.1.2
查询分析器连接到远程服务器来创建触发器
create TRIGGER SAL_InterPackList_iud ON [dbo].SAL_InterPackList
for insert ,delete ,update
AS
declare @expr1 varchar(200)
set @expr1 = 'OPENROWSET('SQLOLEDB',
'DRIVER={SQL Server};SERVER=10.1.1.2;UID=id;PWD=id',
mem.dbo.xxx)'
select Account_code,Account_name into #i from inserted
select Account_code,Account_name into #d from deleted
exec('delete from'+ @expr1+' where exists(select * from #d where Account_code='+ @expr1+'.cCusCode)')
exec('insert into '+@expr1+' (cCusCode,cCusName) select * from #i')
go
zjcxc 元老 2004-09-22
  • 打赏
  • 举报
回复
当然是查询分析器连接到远程服务器来创建触发器

而且这个触发器是反过来连接你的目标表的,即要求提供目标服务器信息给触发器.
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
这个是我的远程数据库的表
OPENROWSET('SQLOLEDB',
'DRIVER={SQL Server};SERVER=192.168.1.172;UID=id;PWD=id',
cerp_app.dbo.SAL_InterPackList) a

我如何才能建立这个表的触发器

比如我的目标表是本地的mem.dbo.xxx
zjcxc 元老 2004-09-22
  • 打赏
  • 举报
回复
可以在远程表里建触发器的.

不过要求你的两台电脑都要开着msdtc服务

即系统服务里面的:Distributed Transaction Coordinator
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
那么有没有什么别的办法,我想实现的就是,当远程表改变时,我的库相应改变

可不可以在远程表里建触发器??
zjcxc 元老 2004-09-22
  • 打赏
  • 举报
回复
你要实现源表改变就改变目标表的话,只能在源表上写触发器.
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
up
zjcxc 元老 2004-09-22
  • 打赏
  • 举报
回复
你的这个想法是不能实现的

触发器仅在数据发生变化时才触发,这个变化指用修改了触发器所在对象的数据,所以必须对视图进行insert/update/delete才会触发器

源表数据的变化不会触发器,因为视图是在查询时取数的,它本身不保存数据,所以源表数据的变化只是在视图查询时才反应给视图,这个根本不会触发触发器,也就实现不了你的要求.
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
邹大哥帮帮忙啊
lanfanghelanfanghe 2004-09-22
  • 打赏
  • 举报
回复
目标表和视图在同一库中,源表在远程数据库中
zjcxc 元老 2004-09-22
  • 打赏
  • 举报
回复
目标表和视图在同一数据库中,还是源表来视图在同一库中?

34,591

社区成员

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

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