SqlBulkCopy & Trigger instead of INSERT
Bonjour a tous,
Je tente (en vain, d'ou le post :D) 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:
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 :
Code:
IF NOT EXISTS (SELECT id FROM Fund WHERE (id = (SELECT FundID FROM inserted)))
car je fais un = alors que SqlBulkCopy traite les lignes comme un seul bloc ??
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!!