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

MS SQL Server Discussion :

[SQL2005][débutant]Trigger ou procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 19
    Points
    19
    Par défaut [SQL2005][débutant]Trigger ou procédure stockée
    Bonjour à tous,

    Je débute avec SQL server et je devrais réaliser quelque chose comme ceci.

    Je reçois des données comme dans la table 1 ci-dessous :


    Table 1 normalisée

    N° enquête / question / valeur

    Enquête1 Q1 123
    Enquête1 Q2 234
    Enquête1 Q3 345
    Enquête2 Q1 111
    Enquête2 Q2 222
    Enquête2 Q3 333

    Et je voudrais obtenir une Table 2 dénormalisée

    N° enquête / ValQ1 / ValQ2 / ValQ3

    Enquête1 123 234 345
    Enquête2 111 222 333

    Je peux créer la structure de la table 2, mais je voudrais qu’elle se mette à jour sur un trigger « sur ajout » de ma table 1 ou alors avec une procédure stockée.

    Je suis vraiment débutant et j’apprécierais vraiment qu’on me montre toutes les étapes.

    Merci

  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 864
    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 864
    Points : 53 016
    Points
    53 016
    Billets dans le blog
    6
    Par défaut
    Pourquoi ne pas réaliser une vue ?

    Un trigger à un coût exhorbitant car il s'active au sein même de la transaction.

    Une procédure d'insertion, cela serait déjà mieux, mais créée de la redondance.

    Une vue ne possède ni l'inconvénient de l'un ni de l'autre. Sauf son temps d'exécution

    A +

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse,

    Outre le fait que dans le cas présent, le code de cette vue ne me parait pas du tout évident à réaliser, il faut dire que dans la réalité, j'aurai par an 1 million de lignes dans ma table 1 et comme j'ai en fait 35 questions par questionnaire, je n'aurai plus que 30000 lignes dans ma table 2. Ce qui sera beaucoup plus performant pour la réalisation de rapports.

    Qui dit dénormalisation dit bien sûr redondance mais dit aussi performance. Dans mon cas c'est la performance et l'intégrité des données qui sont prioritaires.

  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 864
    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 864
    Points : 53 016
    Points
    53 016
    Billets dans le blog
    6
    Par défaut
    Donc une vue indexée s'impose !

    A +

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Peux-tu m'en dire plus ?

    J'ai déjà entendu parlé de ces vues indexées, mais dans mon bon souvenir, c'était présenté comme assez lourd dans le cas ou les tables étaient assez volatiles.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 864
    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 864
    Points : 53 016
    Points
    53 016
    Billets dans le blog
    6
    Par défaut
    Vue indexée :
    une vue avec dessous un index contenant les données.
    C'est SQL Server qui s'occupe directement de mettre à jour l'index à chaque mise à jour (INSERT, UPDATE, DELETE) des données des tables qui constitue la vue.

    Une vue indexée oblige les colonnes des tables qu'elle recence à ne plus évoluer (sinon perte de la vue). Mais cela n'empêche pas de modifier les autres colonnes des tables ou d'en rajouter. Au pire si l'une des colonnes doit évoluer il suffit de supprimer la vue et de la reconstruire.

    Quelques références sur le sujet :
    http://www.sqlservercentral.com/colu...malization.asp
    http://www.sql-server-performance.com/indexed_views.asp

    A +

Discussions similaires

  1. Trigger et procédure stockée
    Par emespere dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/06/2007, 19h15
  2. trigger ou procédure stockée?
    Par iulius dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/03/2007, 15h19
  3. création triggers et procédure stockées
    Par jhons dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/07/2006, 17h54
  4. Triggers et Procédures stockées
    Par agecanonix dans le forum Débuter
    Réponses: 3
    Dernier message: 21/01/2005, 10h16
  5. [Débutant] Création de procédure stockée
    Par david71 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2004, 18h19

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