我有一个状态表,另一个表包含其他数据。我的对象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}}我想我可能不得不求助于光标?
答案 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无法实现您的匹配订单,那么您运气不佳。