2010-11-15 33 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

相關問題