我想得到插入数据的id,假如有一个sql语句要求实现:
修改A表al的字段,让其等于B表刚刚插入数据所对应的id
     如何实现,谢谢了。

解决方案 »

  1.   

    如果是标识列的话
    select @@identity不过会同会话受其它作用域影响最好用
    select SCOPE_IDENTITY()
      

  2.   


    create trigger tri_g on b 
    for insert 
    as 
    begin
    update a set a.a1=c.a1  from inserted c join a on a.id=c.id
    end
      

  3.   

    --這樣?
    declare @t table(ID int identity(1,1),[Name] varchar(10))
    insert @t select 'A'
    SELECT @@IDENTITY
    insert @t select 'B'
    SELECT @@IDENTITY
    /*
    (影響 1 個資料列)                                         
    ---------------------------------------- 
    1(影響 1 個資料列)
    (影響 1 個資料列)                                         
    ---------------------------------------- 
    2(影響 1 個資料列)*/
      

  4.   

    • @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
    • SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。
    • IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
      

  5.   

    A表:             B表      
    al              b.id        
    0                1
    0                2
    0                3
    0                4
    0                5修改A.a1=B.id(新增的id)
      

  6.   


    用触发器吧,当B表插入数据时,修改A表:
    --try
    create trigger tr on B
    for insert as
    begin
        update A set al=I.id
        from A join inserted I on A.数据列=I.数据列
    end
    GO
      

  7.   

    如果是identity字段可以用IDENT_CURRENT,SCOPE_IDENTITY
      

  8.   

    楼上几位好迅速!
    具体是这样,
    A                      B
    a.id  a.name a.pas     b.id    a.id  b.name  b.pas
    1         1    1        1        0    1       1
    2      ...    ...       2        0    ..       ..
    本来B表中a.id是与A表中的a.id关联,但现在a.id中数据由于到入的时候全都为0了,所以
    我要把 b.name和b.pas插入到A表中,这样就得到了id,然后把这个id在B表中update
    这样就关联上了,
    请问几位   这样怎么实现比较好
      

  9.   

    你的思路有问题
    1,b.name,b.pas 这些非唯一的值怎么可能用作关联条件
    2,从你的描述来看,a表中本来就有这些记录了,因为插入b时 没有记录下a.id所以 你想把b里的再插一次到a把新记录的identity值写到b, 业务上就说不通单从实现上来讲:create trigger t on ta
    for insert
    as
       update b set b.[a.id]=a.[a.id] from b inner join inserted a on a.[a.name]=b.[b.name] and a.[a.pas]=b.[b.pas]
      

  10.   

    其实我想通过程序实现
    我的程序思路是这样:
    查询b.id  b.name  b.pas ,把b.name  b.pas 插入到A表中,这样就得到了a.id
    通过刚才查询的b.id找到B表中的数据 在把B表中的a.id与 刚刚得到的a.id 进行关联。
     这我程序的思路,不知道sql语言能否实现。
      

  11.   


    回答:
     1 唯一性应该是通过B表中的id做为唯一性。
     2 B表中的id=0的数据 在A表中完全没有相关数据
      

  12.   

    --假设a.id,b.id都是自增列
    insert A select name,pas from Btruncate table Binsert B select * from A