2010-11-15 69 views
2

我有一个状态表,另一个表中包含其他数据。我的对象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在我做第一块sql中的output

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

anotherImportedTable

data 

statusTable

listingID (pk), status, date 

listingExtraDa TA

data, listingID 

你看,我只希望在anotherImportedTable创建一个进入statusTable每行,然后把一个listingID与行从anotherImportedTablelistingExtraData ......我在想,我可能要求助于游标?

+0

第二个表格中的内容告诉它要将其与哪个记录相关联?请更具体地了解第二张桌子的结构和用途。顺便说一句,从不使用隐式联接。你所拥有的是一个交叉连接,它把第一个表的每个记录与第二个表的第二个记录关联起来。即使你想这样做,最好使用明确的语法,以便维护人员知道你的意图,交叉连接不是偶然事件。 – HLGEM 2010-11-15 18:02:25

+0

@HLGEM我完全同意,它有点乱,所以我最终在这里:)感谢您的输入 - 提供了更多的细节。 – RYFN 2010-11-16 09:26:04

回答

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 [以某种方式]无法实现您的匹配顺序,那么您的运气不好。

+0

啊有趣的使用ROW_NUMBER()OVER,谢谢你,我会看看它是怎么回事。 – RYFN 2010-11-16 09:21:26

+0

啊哈,这正是我以后所做的,非常感谢:) – RYFN 2010-11-16 10:49:03

相关问题