设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2309|回复: 8
打印 上一主题 下一主题

请教关于SQL触发器问题

[复制链接]
跳转到指定楼层
1#
发表于 2005-10-15 01:47:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在做一个ASP程序,想做如下事情:

现在有A表和B表,

B表输入新数据或更新数据时,如B表中的X列与A表的U列相等时,则把A表中的V列复制到数据B表中的Y列。

请问触发器可不可以做到,代码该怎么写?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-10-15 03:12:00 | 只看该作者
可以,看看sql的帮助
3#
 楼主| 发表于 2005-10-15 03:48:00 | 只看该作者
以下是引用徐阿鹏在2005-10-14 19:12:00的发言:

可以,看看sql的帮助

看了,看了一头雾水,越看越不明白,可能自己SQL太差了吧,能不能给点提示
4#
发表于 2005-10-18 16:42:00 | 只看该作者
ALTER TRIGGER 销售_记录明细表_Trigger3

ON dbo.销售_记录明细表

FOR UPDATE

AS

if  update(数量) or update(单价)

begindeclare @订单号 nvarchar(50)

declare @金额 money

declare @err int

set @订单号=(select top 1 销售订单号 from inserted)

set @金额=(SELECT round(SUM(金额),2)  FROM dbo.销售_记录明细表 where 销售订单号=@订单号)UPDATE dbo.销售_记录表

SET 总额 =(SELECT  SUM(金额) AS Expr1

FROM dbo.销售_记录明细表

where 销售订单号=@订单号)

where 销售订单号=@订单号

end对着表点右键,出来个菜单,选触发器,看看有什么。。。。
5#
 楼主| 发表于 2005-10-24 16:41:00 | 只看该作者
非常感谢,我一时还看不太懂,我仔细研究研究。
6#
 楼主| 发表于 2005-10-24 22:41:00 | 只看该作者
以下是引用徐阿鹏在2005-10-18 8:42:00的发言:

ALTER TRIGGER 销售_记录明细表_Trigger3

ON dbo.销售_记录明细表

FOR UPDATE

AS

if  update(数量) or update(单价)

begin

declare @订单号 nvarchar(50)

declare @金额 money

declare @err int

set @订单号=(select top 1 销售订单号 from inserted)

set @金额=(SELECT round(SUM(金额),2)  FROM dbo.销售_记录明细表 where 销售订单号=@订单号)

UPDATE dbo.销售_记录表

SET 总额 =(SELECT  SUM(金额) AS Expr1

FROM dbo.销售_记录明细表

where 销售订单号=@订单号)

where 销售订单号=@订单号

end

对着表点右键,出来个菜单,选触发器,看看有什么。。。。

想请教一下标注为红色部分的含义

select top 1 销售订单号 from inserted

此句不明白是什么意思。insterted是个表名吧?

where 销售订单号=@订单号

这句应该是误打上去的吧?

请兄弟指点指点,不胜感激!

[此贴子已经被作者于2005-10-24 17:41:37编辑过]

7#
发表于 2005-10-25 01:53:00 | 只看该作者
inserted  是 sql事务日志的数据映象表-----------------------------------------dml   语句                             inserted 表                          deleted 表-----------------------------------------insert                       新插入的行                           空update                    更新数据的行更新后的新值         更新数据的行的在更新前的旧值delete                     空                                              删除的行------------------------------------------------deleted和inserted都是sql的表,只能在触发器中可见
8#
发表于 2005-10-25 01:58:00 | 只看该作者
给你的这段代码是当明细表的数量或单价变化时同时更新销售表的总金额SET 总额 =(SELECT  SUM(金额)  FROM dbo.销售_记录明细表

where 销售订单号=@订单号)

where 销售订单号=@订单号这个where 是对的,因为限定只能更新这个订单sum(金额)的金额是我在明细表中的计算列(公式是=数量×单价)当然你写select(sum(数量×单价)。。。也可以

9#
发表于 2005-10-25 01:59:00 | 只看该作者
哦,看了下,直接这样SET 总额 =@金额  where 销售订单号=@订单号

就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-31 07:34 , Processed in 0.106364 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表