代码之家  ›  专栏  ›  技术社区  ›  RYFN

将输出ID插入另一个表

  •  2
  • RYFN  · 技术社区  · 15 年前

    我有一个状态表和另一个包含附加数据的表。我的对象ID是状态表中的pk,所以我需要将它们插入到每个新行的附加数据表中。

    我需要为每个新列表在我的状态栏中插入一个新行,只包含常量。

    declare @temp TABLE(listingID int)
    
    insert into statusTable(status, date)
      output Inserted.listingID into @temp
    select 1, getdate()
    from anotherImportedTable
    

    这使我有足够的新列表ID可以使用。

    现在,我需要将实际的列表数据插入到另一个表中,并将每一行映射到其中一个列表ID-

    insert into listingExtraData(listingID, data)
    select t.listingID, a.data
    from @temp t, anotherImportedTable a
    

    现在这显然不起作用,因为其他数据表和@temp中的ID是不相关的…所以插入的行太多了。

    如何插入每行 anotherImportedTable 进入之内 listingExtraData 以及一个独特的新创造 listingID ?我能在我做这个的时候触发更多的SQL吗? output 在SQL的第一个块中?

    编辑 :感谢您迄今为止的输入,表如下所示:

    其他重要的 :

    data
    

    可状态 :

    listingID (pk), status, date
    

    列表索引数据 :

    data, listingID
    

    你看,我只想在 statusTable 每行 其他重要的 ,然后放一个 列表ID 有一行来自 其他重要的 进入之内 列表索引数据 …我在想我可能不得不使用光标?

    1 回复  |  直到 15 年前
        1
  •  2
  •   AlexS    15 年前

    好的,你可以这样做(如果我对你真正想做的是正确的话):

    insert into listingExtraData(listingID, data)
    select q1.listingID, q2.data
    from 
       (select ListingID, ROW_NUMBER() OVER (order by ListingID) as rn from @temp t) as q1
       inner join (select data, ROW_NUMBER() over (order by data) as rn from anotherImportedTable) q2 on q1.rn = q2.rn
    

    如果匹配逻辑不同,则需要更改其他导入表的排序。如果你不能通过[以某种方式]订购其他重要的物品来完成匹配订单,那么你就走运了。