zoukankan      html  css  js  c++  java
  • sql server 2000 一个表的数据插入到三个相关联表中,一条一条的插入

      1/**********************************************************
      2测试数据 sql server 2000 一个表的数据插入到三个相关联表中,一条一条的插入
      3---涂聚文 缔友计算机信息技术有限公司 软件工程师 geovindu@163.com  www.dupcit.com 
      4---捷为工作室  涂聚文 www.dusystem.com  
      5**********************************************************/

      6---测试数据
      7--生成测试数据表结构  
      8  create   table   A
      9(    
     10    a_id   int identity(100,1),
     11    dname varchar(30),
     12    dates datetime default getdate()
     13
     14  GO 
     15  create   table   B
     16(
     17    b_id   int   identity(10,1),
     18    a_id   int,
     19        coutry varchar(30),
     20        bdates datetime default getdate()
     21)  
     22GO
     23
     24
     25create   table   C
     26(
     27    c_id   int   identity(1,1),
     28    b_id   int,
     29        ac_id   int,
     30        cname varchar(30),
     31        cdates datetime default getdate()
     32)  
     33 go  
     34create table E
     35(
     36     E_id int   identity(11000,1),
     37     E_a varchar(30),
     38     E_b varchar(30),
     39     E_c varchar(30),
     40     edates datetime default getdate()
     41)
     42GO
     43
     44insert into E(E_a,E_b,E_c)
     45              select 'A5','B5','C5'  
     46union   all   select 'A6','B6','C6'  
     47union   all   select 'A7','B7','C7'  
     48union   all   select 'A8','B8','C8' 
     49union   all   select 'A9','B9','C9'  
     50union   all   select 'A10','B10','C10' 
     51
     52  --创建触发器  
     53
     54drop trigger trg_A
     55go
     56  create   trigger   trg_A  
     57  on   A  
     58  for   insert  
     59  as  
     60  begin  
     61          insert   into   B(a_id)   select   a_id   from   inserted  
     62          insert   into   C(b_id)   select   @@identity  
     63  end  
     64  go  
     65   
     66  --向A表插入数据,实现触发  
     67  insert   into   A(a_id)   select   1  
     68   
     69  --查看触发器执行结果  
     70  select   *   from   A  
     71  select   *   from   B  
     72  select   *   from   C  
     73   
     74
     75/*---创建事务
     76geovindu@163.com 缔友计算机信息技术有限公司
     77涂聚文 www.dusystem.com 
     78*/

     79
     80GO
     81
     82CREATE   PROCEDURE   sp_InsertMm  
     83  @dname   varchar(20),  
     84  @coutry   nvarchar(50),
     85  @cname varchar(50)
     86  AS  
     87  DEClARE   @AID   int,@BID int   
     88  --   创建事务Mm  
     89  BEGIN   TRANSACTION   InsertSome  
     90  INSERT   INTO   A   (dname)  
     91  VALUES   (@dname)     
     92  SET   @AID = @@IDENTITY   --   得到刚才增加的Id     
     93  INSERT   INTO   B   (a_id, coutry)  
     94  VALUES   (@AID,@coutry
     95  SET   @BID = @@IDENTITY
     96    INSERT   INTO  C (b_id,ac_id,cname)  
     97  VALUES   (@BID,@AID,@cname
     98   
     99  --   如果有错误,回滚事务,否则提交事务  
    100  IF   @@ERROR   >   0  
    101  ROLLBACK   TRANSACTION   InsertSome  
    102  ELSE  
    103  COMMIT   TRANSACTION   InsertSome   
    104GO
    105
    106exec sp_InsertMm 'A2','B2','C2'
    107
    108select * from A
    109select * from B
    110select * from C
    111select * from E
    112  --删除测试环境  
    113  drop   trigger   trg_A  
    114  drop   table   A,B,C,E
    115  drop procedure sp_InsertMm
    116drop procedure sp_InsertMm1
    117
    118--循环的话,你可以用while,也可以用go,如:  
    119  --1)  
    120CREATE   PROCEDURE   sp_InsertMm1
    121as
    122  declare   @i   int,@count int
    123  select @count=count(*from E
    124 -- select @count
    125  
    126  set   @i   =   11000    
    127  while   @i<=11000+@count  
    128  begin  
    129     --操作语句  
    130DECLARE   @dname   varchar(20),@coutry   nvarchar(50),@cname varchar(50)
    131DEClARE   @AID   int,@BID int 
    132SELECT @dname=E_a  FROM E where E_id=@i
    133SELECT @coutry=E_b  FROM E where E_id=@i
    134SELECT @cname=E_c  FROM E where E_id=@i
    135  --   创建事务Mm  
    136  BEGIN   TRANSACTION   InsertSome  
    137  INSERT   INTO   A   (dname)  
    138  VALUES   (@dname)     
    139  SET   @AID = @@IDENTITY   --   得到刚才增加的Id     
    140  INSERT   INTO   B   (a_id, coutry)  
    141  VALUES   (@AID,@coutry
    142  SET   @BID = @@IDENTITY
    143    INSERT   INTO  C (b_id,ac_id,cname)  
    144  VALUES   (@BID,@AID,@cname
    145  --   如果有错误,回滚事务,否则提交事务  
    146  IF   @@ERROR   >   0  
    147  ROLLBACK   TRANSACTION   InsertSome  
    148  ELSE  
    149  COMMIT   TRANSACTION   InsertSome  
    150      set   @i=@i+1  
    151  end  
    152 Go
    153
    154exec sp_InsertMm1
    155  
    156  --2)  
    157  declare   @i   int  
    158  set   @i=0  
    159  xloop:--标签  
    160  --操作  
    161  set   @i=@i+1  
    162   
    163  if   @i<100 --判断,当@i小于100的时候,回到操作执行处,继续执行  
    164 goto   xloop
    165
    166/**********************************************************
    167测试数据一个表的数据插入到三个相关联表中,一条一条的插入
    168---涂聚文 缔友计算机信息技术有限公司 软件工程师 geovindu@163.com  www.dupcit.com 
    169---捷为工作室  涂聚文 www.dusystem.com  
    170**********************************************************/
  • 相关阅读:
    bzoj 1004 burnside 引理+DP
    bzoj 3453 数论
    HDU 2899 三分
    HDU 2199 二分
    bzoj 3450 DP
    bzoj 1197 DP
    bzoj 2121 DP
    bzoj 2258 splay
    bzoj 1296 DP
    Memcached的限制和使用建议
  • 原文地址:https://www.cnblogs.com/geovindu/p/1516159.html
Copyright © 2011-2022 走看看