ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » MS SQL Server » 求助 触发器

标题: [笔记] 求助 触发器
离线 JJooO



精华贴数 0
个人空间 0
技术积分 8 (121343)
社区积分 0 (1812743)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-3 11:25 
求助 触发器

Create table product
(
pId char(6) primary key,
pName varchar(300) not null,
pPrice smallmoney,
pNum float
)
go


Create table sale
(
sNo int identity(1001,1) primary key,
sId char(6),
sPrice smallmoney,
sDate datetime
)
go

用触发器实现:
update product set pNum=pNum-x where pid=a

当这个发生的时候,sale表中插入数据,插入的行数 为 x(假设x为整数)
当x为float时候(比如x=5.5),插入的行数为6行。

如何实现。。。


只看该作者    顶部
离线 smthgdin
老会员



精华贴数 0
个人空间 0
技术积分 1395 (1212)
社区积分 1 (35162)
注册日期 2004-5-13
论坛徽章:2
ITPUB元老开发板块每日发贴之星    
      

发表于 2008-7-3 11:58 
你可以自学一下~~~


__________________
www.kooboy.net
只看该作者    顶部
离线 javens
资深会员


精华贴数 1
个人空间 529
技术积分 3281 (450)
社区积分 17841 (86)
注册日期 2004-6-29
论坛徽章:42
ITPUB元老生肖徽章2007版:猪生肖徽章2007版:鼠体育版块博采纪念徽章生肖徽章2007版:狗生肖徽章:狗
生肖徽章:羊生肖徽章:鸡    

发表于 2008-7-3 15:27 
這個應該很簡單,在UPDATE時候觸發即可


__________________
只看该作者    顶部
离线 JJooO



精华贴数 0
个人空间 0
技术积分 8 (121343)
社区积分 0 (1812743)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-3 17:27 
回复 #2 smthgdin 的帖子

呵呵


只看该作者    顶部
离线 sqysl
孤独剑客



来自 山东
精华贴数 0
个人空间 0
技术积分 1260 (1375)
社区积分 31 (6199)
注册日期 2006-12-20
论坛徽章:0
      
      

发表于 2008-7-3 17:34 
对,可以自学。


__________________
曾经沧海难为水,除却巫山不是云。
天若有情天亦老,人间正道是沧桑。
只看该作者    顶部
离线 cosio
资深会员



精华贴数 0
个人空间 0
技术积分 1591 (1064)
社区积分 44 (5196)
注册日期 2004-8-8
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-7-3 23:39 
create trigger tri_test
as
declare @num int
select count(*) into @num from inserted
IF @num>0
    update product set pNum=pNum-@num where pid=a

很久没有用SQL,忘记了不少,LZ可以自己学学!


__________________
QQ:75558288
__________________
MSN:fenny_8@hotmail.com
__________________
Web:http://cosio.itpub.net
只看该作者    顶部
离线 Ryan-liumin
ITpub-CFO


精华贴数 0
个人空间 0
技术积分 4335 (320)
社区积分 9531 (165)
注册日期 2008-5-4
论坛徽章:3
奥运纪念徽章体育版块博采纪念徽章    
      

发表于 2008-7-5 09:30 
呵呵  都要LZ自学啊


__________________
....踩章的交税...10P

....菠菜赢的交税10%

....用于救济广大穷苦大众
只看该作者    顶部
离线 xiebinren
Amir Osama Bin Laden


来自 火星
精华贴数 0
个人空间 0
技术积分 1013 (1802)
社区积分 2820 (459)
注册日期 2007-6-29
论坛徽章:1
授权会员     
      

发表于 2008-7-8 20:17 
自学


__________________
蓝色理想
SAP天地  专注 专业 专心
http://hi.baidu.com/festsoft
只看该作者    顶部
离线 沙漠孤鹰
初级会员


精华贴数 0
个人空间 0
技术积分 163 (11271)
社区积分 12 (9861)
注册日期 2006-4-18
论坛徽章:0
      
      

发表于 2008-7-9 11:15 
回复 #1 JJooO 的帖子

这样理解楼主的意思,不晓得对不对?

写一个product表上的触发器
当修改表product的条件满足:update product set pNum=pNum-x where pid=a
就往sale表中写数据,写入数据的条数由 x 决定

Create Trigger TU_product on product
For Update
AS

declare @i_pId char(6), @i_pNnme varchar(300), @i_pPrice smallmoney, @i_pNum float
declare @d_pId char(6), @d_pNnme varchar(300), @d_pPrice smallmoney, @d_pNum float
declare @ftch_ins int, @ftch_del int
declare @x int, @i int

begin

  declare c_product_ins cursor for select pId, pName, pPrice, pNum from inserted
  open c_product_ins
  fetch c_product_ins into @i_pId, @i_pNnme, @i_pPrice, @i_pNum
  set @ftch_ins=@@fetch_status

  declare c_product_del cursor for select pId, pName, pPrice, pNum from deleted
  open c_product_del
  fetch c_product_del into @d_pId, @d_pNnme, @d_pPrice, @d_pNum
  set @ftch_del=@@fetch_status

  while (@ftch_ins+@ftch_del=0)
    begin
      if (@i_pId=@d_pId) and (@i_pId=a) and (@d_pNum>@i_pNum)
         and (@i_pNnme=@d_pNnme) and (@i_pPrice=@d_pPrice)  
        begin
          set @x=ceiling(@d_pNum-@i_pNum)

          set @i=1
          while @i<=@x
          begin
            insert into sale values(...)
            set @i=@i+1
          end
        end
      
      fetch c_product_ins into @i_pId, @i_pNnme, @i_pPrice, @i_pNum
      set @ftch_ins=@@fetch_status

      fetch c_product_del into @d_pId, @d_pNnme, @d_pPrice, @d_pNum
      set @ftch_del=@@fetch_status
    end

  close c_product_ins
  deallocate c_product_ins

  close c_product_del
  deallocate c_product_del

end


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问