有两张表A和B,A的主键在B表中是一个外键,请问如何在向A表添加数据的时候,同时B表中也可以自动添加数据,比如向A表中插入id(A表主键)为1的一条数据,B表中同时添加外键为1的一条数据!请问高手们怎么实现呢???因为我是在后台的java代码中实现的,涉及到两条sql语句,请问在A表主键自动生成的时候向B表添加数据怎么获得A表的主键值!!!!谢谢

解决方案 »

  1.   

    貌似触发器可实现.
    create trigger my_trig on A for insert
    as
    begin
      insert into b (需要的字段) select 需要的字段或数据值 from inserted 
    end
      

  2.   


    /*
    创建两表,建立一个视图基于这两张表。
    创建触发器实现向视图插入数据时等于
    分别向两表插入数据
    */--创建表tbl_dept:
    create table tbl_dept(
    deptid varchar(4) primary key,
    deptname varchar(10) not null
    )--创建表tbl_emp:
    create table tbl_emp(
    empid varchar(10) primary key,
    empname varchar(20) not null,
    deptid varchar(4) foreign key
    references tbl_dept(deptid) 
    not null
    )--创建视图用于存储表tbl_dept和tbl_emp表中的数据:
    create view v_empinfo 
    as 
    select 
    tbl_emp.empid,tbl_emp.empname,tbl_emp.deptid,
    tbl_dept.deptname 
    from 
    tbl_emp,tbl_dept
    where 
    tbl_emp.deptid=tbl_dept.deptid
    select *from v_empinfo--创建触发器实现上述功能:
    create trigger tr_insert on v_empinfo
    instead of insert
    as
    declare @eid varchar(10),@ename varchar(20),
            @did varchar(4),@dname varchar(10)
    select @eid=empid,@ename=empname,
           @did=deptid,@dname=deptname
    from 
           inserted
    insert into tbl_dept values(@did,@dname)
    insert into tbl_emp values(@eid,@ename,@did)--验证是否成功向两表中插入数据:
    insert into v_empinfo values('200911076','tracy',
                                 '1001','sales')
    select *from tbl_emp
    select *from tbl_dept--创建触发器实现删除主表中的数据时自动删除附表中的数据:--创建表tbl_stu:
    create table tbl_stu(
    stuid varchar(15) primary key,
    stuname varchar(20) not null
    )--插入数据:
    insert into tbl_stu values('200911076','李白和')
    insert into tbl_stu values('200911077','王洪洋')--创建表tbl_score:
    create table tbl_score(
    stuid varchar(15) 
    foreign key 
    references tbl_stu(stuid)
    not null,
    Math int default(0)
    )--插入数据:
    insert into tbl_score values('200911076',85)
    insert into tbl_score values('200911077',95)--创建视图v_view:
    create view v_view 
    as
    select 
    s.stuid,s.stuname,sc.math
    from 
    tbl_stu s,tbl_score sc
    where
    s.stuid=sc.stuid--为视图创建触发器tr_delete:
    create trigger tr_delete on v_view
    instead of delete
    as
    declare @stuid varchar(15),@stuname varchar(20),
            @math int
    select @stuid=stuid,@stuname=stuname,@math=math
           from deleted
    delete tbl_score where stuid=@stuid
    delete tbl_stu where stuid=@stuid--验证是否删除两表中对应的所有信息
    delete v_view where stuid='200911077'
    select *from tbl_stu
    select *from tbl_score
    曾经学习时的例子,上机练习