0

これが状況です

私はSQLにSPを持っています。これはそれぞれTable type variablesに一括挿入を実行するために使用される2つで動作します。Mails & attachments両方ともSQLで関係があります。one to manyもちろんMailId、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

MailDateまでuniqueはメール用だったので、このコードは正常に機能していましたがMailDate、2行で同じで、一意のキーとして使用できる列が他にないという状況が発生しました。必要なのは、次のような解決策です。メールに挿入して、添付ファイルの次の挿入に使用できる生成された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 の間に 1 対多の関係があると仮定します。たとえば、列 X です。その場合、[merge...on 1=0....]/[output...] を使用して @ をマージできます。 mail テーブルにメールを送信して mailID を出力し、@mail の列 X を一時テーブルに挿入し、@attachment をテーブルの添付ファイルに挿入し、maileid と X を持つ一時テーブルと結合します。

于 2013-03-12T17:50:11.450 に答える