--如果 PERSON_ID 是自增量declare @ID int
begin tran 
  insert into A  
   set @ID = @@idectity
  insert into A1(A_ID, ....) 
commit tran --如果 PERSON_ID 不是自增量
declare @ID int
begin tran 
  insert into A  
   select @ID = max(PERSON_ID)
   from A
  insert into A1(A_ID, ....) 
commit tran 

解决方案 »

  1.   

    set xact_abort on
    begin tran
      insert into A  ---> 这个时候如何获取这个表的ID,再用这个ID作为insert A1的参数 ???
      insert into A1(A_ID, ....)
    commit tran自增時用@@identity,GUID時用一個變量獲取這個值再插入另一個表
      

  2.   

    进一步确认:--如果 PERSON_ID 不是自增量 
    declare @ID int 
    begin tran 
    insert into A 
    select @ID = max(PERSON_ID) + 1 from A 
    insert into A1(@ID, ....) 
    commit tran 应该是这样的吗?用了事务是不是在多用户并发新增处理的情况下,不受影响了?
      

  3.   

    id自增长
    [code=SQL]set xact_abort on 
    declare @id int
    begin tran 
      insert into A ... 
      select @id=@@idectity
      insert into A1(@id, ....) 
    commit tran [/code]如果id不是自增长的,你在 insert into A 的时候,就必须指定这个值,这个值直接用在 insert into B 就可以了
      

  4.   

    是啊就看父表的主键数据是如何定义的了
    自增:
    declare @a_id int
    insert into a .....
    set @a_id=@@identity
    insert into a1............uniqueidentifier类型
    declare @a_id uniqueidentifier
    set @a_id=newid()
    insert into a.....insert into a1......其他定义
    就先获取该主键应该写入的数据,再依次写入 和uniqueidentifier类型顺序类似,只是这个数据是根据用户定义的逻辑获得的
      

  5.   


    ---可以这样declare @ID int 
    begin tran 
    insert into A(id,其他字段) select @ID = isnull(max(PERSON_ID),0) + 1,其他字段 from A WITH(XLOCK,PAGLOCK))
    insert into A1(@ID, ....)  
    commit tran 
      

  6.   

    如果不是自增,可以在程序外强制控制写入对应id,也不难。
    如果是自增   set @ID = @@idectity 就ok