Bonjour a tous,
Je tente (en vain, d'ou le post ) d'insérer des lignes dans ma base de données a partir de fichiers Excel en utilisant la méthode SqlBulkCopy.
En fait mon fichier Excel est de la forme: fundID, name, currency, price; ou fundID est une clé etrangere sur la table Fund. Le problème, c'est que les utilisateurs sont amenés a uploadé un fichier Excel sans avoir préalablement créé le fundID.
J'ai donc créé un TRIGGER INSTEAD OF INSERT qui vérifie que le fundID existe, et si ce n'est pas le cas, il le créé avant d'insérer la ligne qui y fait référence.
Tout cela marche très bien quand j'insère une ligne directement dans SQL Server.
Par contre, quand j'utilise la méthode SqlBulkCopy (qui fonctionne lorsque le trigger n'est pas présent), je rencontre une erreur.
TRIGGER:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 ALTER TRIGGER [CreateSubFundSEC] ON [dbo].[TB_PortfolioSec] INSTEAD OF INSERT AS BEGIN IF NOT EXISTS (SELECT id FROM Fund WHERE (id = (SELECT FundID FROM inserted))) BEGIN INSERT INTO TB_Fund(id, createdBy, createdOn) SELECT FundID, createdBy, createdOn FROM inserted END INSERT INTO TB_PortfolioSec (FundID, ISIN, date, name, CCY, quantity, costBase, XRate, priceLocal, createdBy, createdOn) SELECT subFundID, ISIN, date, name, CCY, quantity, costBase, XRate, priceLocal, createdBy, createdOn FROM inserted END
Le problème vient de :
car je fais un = alors que SqlBulkCopy traite les lignes comme un seul bloc ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part IF NOT EXISTS (SELECT id FROM Fund WHERE (id = (SELECT FundID FROM inserted)))
Il n'y aurait pas moyen de le forcer a faire du ligne a ligne ?
J'espere que j'ai été plus ou moins clair... Sinon je preciserai !
Merci a vous!!
Partager