IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

BULK INSERT et trigger sur INSERT


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 87
    Par défaut [Résolu] BULK INSERT et trigger sur INSERT
    Bonjour,

    Dans le cadre de l'alimentation d'une BDD SQL 2008, j'utilise SSIS 2008 et les destinations OLE DB pour faire des insertions en BULK INSERT (Openrowset à l'aide de fastload).
    Sur ma table destination, j'ai mis un trigger qui doit me faire des calculs "tordus" sur chaque lignes insérées.
    Mon soucis est qu'il ne me fait mon calcul que sur ma dernière ligne de mon paquet (~10000). J'en ai déduit ce chiffre car je n'ai que 100 ligne de calculés sur les 1 000 000 que comportent ma table.

    Je tiens a préciser que j'ai activer le FIRE_TRIGGERS sur ma destination OLE DB dans SSIS.

    Si je coupe le BULK INSERT mon trigger passe bien pour toutes mes lignes mais mon alimentation met 2h au lieu de 10 minutes

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    Un trigger est ensembliste. Il ne se déclenchera donc qu'une seule fois s'il n'y a qu'un seul INSERT quelque soit le nombre de ligne insérées : une seule ou un million.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 87
    Par défaut
    Merci pour votre réponse.
    C'est donc le fonctionnement du bulk qui n'est pas compatible avec un trigger sur INSERT?
    Mon approche pour faire mes calculs lignes a lignes n'est donc pas bonne?
    J'avais pense au trigger afin d'éviter un fastidieux CURSEUR sur ma table...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par fufurax Voir le message
    C'est donc le fonctionnement du bulk qui n'est pas compatible avec un trigger sur INSERT?
    Non !
    Mon approche pour faire mes calculs lignes a lignes n'est donc pas bonne?
    oui !!!
    J'avais pense au trigger afin d'éviter un fastidieux CURSEUR sur ma table...
    Vous n'avez pas besoin de curseur. Une seule requête suffit. SQL est un langage complet au sens de la machine de turing, ce qui signifie qu'une seule requête, aussi complexe soit-elle, permet de répondre à tout traitement.

    Encore faut-il savoir écrire des requêtes, ce qui devient très rare chez les développeurs !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 87
    Par défaut
    Encore faut-il savoir écrire des requêtes, ce qui devient très rare chez les développeurs !


    Merci pour vos réponses mais elles sont vraiment obscures.

    Pouvez vous svp approfondir le 1er NON.

    En toute franchise, si j'avais une idée pour éviter l'utilisation du Trigger ou du CURSEUR...J'aurai evité de faire ce post.

    Merci

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Dans votre trigger, vous utilisez plus que probablement des variables pour réaliser les calculs dont vous parlez.
    Cela est faux car, en toute logique, on ne peut pas récupérer toutes les valeurs de toutes les colonnes dans une variable.
    Vous pouvez voir dans ce billet les anomalies que cela produit.
    Lorsque vous codez en SQL, oubliez toute itération.

    Si vous donniez le code de votre trigger, nous pourrions vous aider

    @++

Discussions similaires

  1. Triggers sur insertion avec SQL Server 2005
    Par Naail dans le forum Développement
    Réponses: 14
    Dernier message: 01/07/2009, 15h23
  2. TRIGGER d'insertion après une requête INSERT
    Par nasimpat7 dans le forum Développement
    Réponses: 11
    Dernier message: 06/04/2009, 15h45
  3. Création Trigger sur INSERTION
    Par tibblou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2008, 11h13
  4. TRIGGER sur INSERT
    Par Jean_Benoit dans le forum Forms
    Réponses: 7
    Dernier message: 22/11/2006, 13h03
  5. Insert avec select sur table avec Trigger d'insertion
    Par bran_noz dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2005, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo