0

这是情况

我在 SQL 中有一个 SP,它适用于两个Table type variables分别用于执行批量插入的 SP,现在它们当然Mails & attachments在 SQL 中都有关系,SP 看起来像这样one to manyMailId

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两行相同的情况,我没有任何其他列可以用作唯一键,所以我需要一些解决方案我可以插入邮件并获取生成的 ID,这些 ID 可用于下一次插入附件。

如果解决方案没有以下内容,那将是可观的

  1. 任何类型的循环。

  2. 光标。

4

2 回答 2

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
于 2013-03-12T17:37:46.587 回答
0

我假设您在@mails 和@attachments 之间有一对多的关系,例如第 X 列。如果是这样,您可以使用 [merge...on 1=0....]/[output...] 来合并@邮件到您的邮件表并输出mailID,并将@mail中的列X放入临时表,然后将@attachment插入表附件,加入具有maileid和X的临时表。

于 2013-03-12T17:50:11.450 回答