2013-03-12 2 views
0

Voici la situationSQL insert en vrac dans sélectionnez

J'ai un SP dans SQL qui fonctionne sur deux Table type variables qui sont utilisés pour effectuer l'insertion en vrac pour Mails & attachments respectivement maintenant ils ont tous deux rapports dans SQL de one to many bien sûr sur MailId , SP ressemble à ce

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 

Jusqu'à présent MailDate a été unique pour le courrier si ce code fonctionnait très bien, mais maintenant j'ai une situation où MailDate sont les mêmes en deux lignes et je n'ai pas une autre colonne WHIC h pourrait être utilisé comme une clé unique, donc ce dont j'ai besoin est une solution pour que je puisse insérer dans Mails et obtenir des ID générés qui peuvent être utilisés dans la prochaine insertion de pièces jointes.

Il serait appréciable si la solution ne serait pas la suite

  1. Tout type de boucles.

  2. Curseurs.

+0

Pourriez-vous utiliser une combinaison de MailDate et MailFrom (en supposant que vous avez cela) pour déterminer l'unicité au lieu de simplement MailDate? –

Répondre

0

Je suppose que le MailDate est unique dans @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

Je suppose que vous avez un à plusieurs entre @mails et @attachments, par exemple colonne X. Dans ce cas, vous pouvez l'utilisateur [ fusionner ... sur 1 = 0 ....]/[sortie ...] pour fusionner @mail à votre table de messagerie et afficher l'ID mail, et la colonne X de @mail dans la table temporaire, puis insérer @attachment dans la pièce jointe, joindre avec la table temporaire qui a maileid et X.

+0

S'il n'y a pas de relation unique entre les messages variables de votre table et les pièces jointes des variables de table, votre problème est inévitable. Par exemple, si vous avez un enregistrement en double dans @mails, comment pouvez-vous distinguer quelle pièce jointe appartient à quel mail? – ljh