2013-03-12 91 views
0

這裏的情況SQL批量插入到選擇

我在SQL有一個SP這兩個Table type variables這是用來分別執行批量插入到Mails & attachments現在,他們都對MailId在課程one to many SQL關係工作,SP看起來像這樣

MailInsertSP 
    @Mails mailsTableVar 
    @Attachements attachementsTableVar 

-- this query will insert mails & generate MailIds 
insert into Mails 
(mails table column list...) 
select 
value list 
from @Mails 

-- this query will insert attachments 
insert into Attachments 
(MailId, other columns...) 
select 
(select MailId from Mails where MailDate = TBL.MailDate) as MailId, 
other values 
from @Attachements as TBL 

到目前爲止MailDateunique的郵件因此,此代碼工作正常,但現在我已經得到的情況下MailDate兩行是相同的,我沒有任何其他的列whic h可以用作唯一鍵,所以我需要的是一些解決方案,以便我可以插入郵件並獲取生成的ID,這些ID可以用於下一次插入附件。

如果解決方案將不會跟隨

  1. 任何種類的循環,這將是明顯的。

  2. 遊標。

+0

您可以使用MailDate和MailFrom的組合(假設您有)來確定唯一性而不僅僅是MAILDATE? – 2013-03-12 17:27:11

回答

0

我假設MAILDATE是@Mails

insert into Attachments 
(MailId, other columns...) 
select 
(select MailId from @Mails where MailDate = TBL.MailDate) as MailId, 
other values 
from @Attachements as TBL 
0

唯一我假設你有一個@mails和@attachments之間一對多的關係,例如列X.如果是這樣,你可以通過用戶[合併... on 1 = 0 ....]/[output ...]將@mail合併到您的郵件表並輸出mailID,並將@從@mail輸入到temp表中,然後將@attachment插入到表附件中,加入具有maileid和X的臨時表。

+0

如果您的表變量郵件和表變量附件之間沒有任何唯一關係,那麼您的問題是不可避免的。例如,如果您在@mails中有完全重複的記錄,那麼您如何區分哪個附件屬於哪個郵件 – ljh 2013-03-12 17:54:07