将输出ID插入另一个表

时间:2010-11-15 17:24:16

标签: sql sql-server sql-server-2005 tsql

我有一个状态表,另一个表包含其他数据。我的对象ID是状态表中的PK,因此我需要将这些ID插入到每个新行的附加数据表中。

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

declare @temp TABLE(listingID int)

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

这为我提供了足够的新商家信息ID。

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

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

现在这显然不起作用,因为otherDataTable和@temp中的ID是无关的...所以我插入的行太多了。

如何将anotherImportedTable中的每一行插入listingExtraData以及新创建的唯一listingID?我可能在第一块sql中output处触发更多sql吗?

编辑:感谢您到目前为止的输入,这是表格的样子:

anotherImportedTable

data

statusTable

listingID (pk), status, date

listingExtraData

data, listingID

您看到我只想在statusTable中每行anotherImportedTable创建一个条目,然后将listingID中的一行anotherImportedTable放入listingExtraData {{1}}我想我可能不得不求助于光标?

1 个答案:

答案 0 :(得分:2)

好的,这是你怎么做的(如果我对你真正想做的事情是对的):

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

如果匹配逻辑不同,则需要更改anotherImportedTable的排序。如果通过以某种方式订购anotherImportTable无法实现您的匹配订单,那么您运气不佳。