我有两个表,A1和A2。其中A1的键是ID,A2包含了对应于A1中每条记录的不同条目,比如在A1里,有:
ID   sth1   sth2
001  ...    ...
002  ...    ...
A2里有:
ID   index  sth
001  1      ....
001  2      ....
002  1      ....
002  2      ....
002  3      ....
003  1      ....
003  2      ....
这些内容是从ASP.NET页面中由客户端输入的,包括主记录的内容和对应该记录的若干条目,添加主记录内容我已经做了,问题是动态添加各个条目应该怎么实现?是否需要用到事务?因为每条记录至少有两个条目,否则会破坏数据库完整性。
我是菜鸟,还请各位大人不吝赐教,在此多谢了!!

解决方案 »

  1.   

    用事务。后台SQL的事务使用如下:set xact_abort onbegin traninsert into ...insert into ...commit tran像你说的那种情况,由前台输入的多条数据保存导后台,需要在前台代码中用事务。
      

  2.   

    对不起,您说的我还不是很明白。我是想问,假如在客户端需要添加一条主记录,带有三个条目,在主表A1里添加了该记录后,比如ID是002,那么然后如何再将客户端控件输入的三个条目信息添加到副表A2表里,分别是:ID  index  content
    002  1     ...
    002  2     ...
    002  3     ...
    也就是说,每条记录所带条目的数目是由客户端动态决定的,可以是2到N条。
    ID由SQL自动生成(在此要感谢zjcxc(邹建),俺套用了他的一段代码加以修改实现的)
      

  3.   

    在前台循环,逐条追加到后台,如果你用的是ADO.NET,那么直接调用DataAdapter的更新方法即可。
      

  4.   

    先谢谢wangtiecheng的关注!我会用你的方法试试,看行不行。
      

  5.   

    if object_id('pubs..A1') is not null
       drop table A1
    go
    create table A1(id varchar(10))
    insert into A1(ID) values('001')
    insert into A1(ID) values('002')
    goif object_id('pubs..A2') is not null
       drop table A2
    go
    create table A2(ID varchar(10),[index] int)
    insert into A2(ID,[index]) values('001',  1)
    insert into A2(ID,[index]) values('001',  2)
    insert into A2(ID,[index]) values('002',  1)
    insert into A2(ID,[index]) values('002',  2)
    godeclare @I int
    set @I = 3 --(2--N)
    declare @ID as varchar(10)
    set @ID = '003'
    insert into A1(ID) values(@ID)declare @J int
    set @J = 1
    while @J <= @I
    begin
      insert into A2(ID , [index]) values(@ID , @J)
      set @J = @J + 1
    endselect * from A1
    select * from A2drop table A1,A2/*
    id         
    ---------- 
    001
    002
    003(所影响的行数为 3 行)ID         index       
    ---------- ----------- 
    001        1
    001        2
    002        1
    002        2
    003        1
    003        2
    003        3(所影响的行数为 7 行)
    */