多表触发一表

jannock 2011-07-14 12:03:03
请问我更新一表A中的数据,要触发更新B 表中的数据(包括插入、更新、删除)
更新一表C中的数据,要触发更新B 表中的数据(包括插入、更新、删除)
还有D 表等等
A表
rkdh mc gg zs sl 分别是入库单号 名称 规格 支数 重量
1001 aa 5 5 40

如果 C 表中插入记录的话
rkdh mc gg zs sl 分别是入库单号 名称 规格 支数 重量
3001 aa 6 6 66
另一个表B
部分字段
pzh zs sl lx
1001 5 40 A
3001 6 66 C
要求更新表A的支数或者数量时 表B 触发更新 (同样插入、删除有效)
create trigger UpdateA on A表 for insert,update,delete --创建一个insert、update和delete都会触发的触发器
as
begin
if exists(select 1 from inserted) --判断inserted表中是否有数据,如果有..就是发生了insert或update
begin
if not exists(select 1 from deleted) --如果inserted里有数据,但deleted里没有数据,则是insert
insert 表B select rkdh,zs,sl from inserted ----这里这么加一个固定值 如果是表A则插入的 LX字段值为A
else --如果inserted和deleted中都有数据,则是update
update 表B set zs=i.zs,sl=i.sl from inserted as i where 表B.pzh=i.rkdh
end
else --如果inserted里什么也没有,但触发了,则是发生了delete
delete 表B from deleted as d where 表B.pzh=d.rkdh
end

上述红色的部分该如何解决呢?
create trigger UpdateA on A表 for insert,update,delete
as
begin
if exists(select 1 from inserted)
begin
if not exists(select 1 from deleted)
insert 表B select rkdh,zs,sl,'A' from inserted
else
update 表B set zs=i.zs,sl=i.sl from inserted as i where 表B.pzh=i.rkdh and lx='A'
end
else
delete 表B from deleted as d where 表B.pzh=d.rkdh and lx='A'
end

这个执行时 检验语法时 报错 查询中列名或表名 不匹配

请高手指教是 注明解释!!!谢谢!
...全文
72 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jannock 2011-07-14
  • 打赏
  • 举报
回复
错误 107:列前缀 '表B'与查询中所用的表名或别名不匹配。
AcHerat 元老 2011-07-14
  • 打赏
  • 举报
回复
列一致是可以的。
jannock 2011-07-14
  • 打赏
  • 举报
回复
insert 表B(pzh,zs,sl,lx) select rkdh,zs,sl,'A' as lx from inserted
这个语句能执行吗??
jannock 2011-07-14
  • 打赏
  • 举报
回复
insert 表B(pzh,zs,sl,lx) select rkdh,zs,sl,'A' as lx from inserted
是的 表B 中的 LX 表示是哪个表 触发的
AcHerat 元老 2011-07-14
  • 打赏
  • 举报
回复
如果是按楼主的意思,那么表B要加一个字段表示是哪个表插入的,字段比如为lx

表B(楼主现有字段,lx)

A表触发器上的插入语句:

insert 表B select rkdh,zs,sl,'A' as lx from inserted 这样子,其他表的触发器类似。
jannock 2011-07-14
  • 打赏
  • 举报
回复
insert 表B(pzh,yrkdh,zs,sl,lx) select rkdh,rkdh,zs,sl,'A' as lx from inserted
pzh yrkdh lx 均为字符型
zs sl 为整型
执行此命令时 错误 107:列前缀 '表B'与查询中所用的表名或别名不匹配。
liang145 2011-07-14
  • 打赏
  • 举报
回复
表B中的lx这一列是不是字符类型的啊?

34,593

社区成员

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

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