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 :

Petite probleme copier requete dans un nouveau table


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Par défaut Petite probleme copier requete dans un nouveau table
    Salut et merci pour lire ma question! J'ai fais une requete , ce que je veux c'est stoquer le resultat de cette requete dans un quatrieme table nomme Rapport (table Rapport n'est pas cree avec CREATE TABLE il doit avoir seulement le resultat de ma requete au-dessous).

    J'ai une requete:

    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
     
    SELECT tab1.DataOraPlecare,
    		tab1.DataOraSosire,
    		tab3.TipAutomobil,
    		tab3.TipCombustibil,
    		AVG(CombustibilConsumat) AS avgCombustibilConsumat
    FROM dbo.FoaieParcursMasina AS tab1
    JOIN dbo.PatrimoniuMasini AS tab2
    	ON tab1.IdMasina = tab2.IdMasina
    JOIN dbo.TipuriAutomobile AS tab3
    	ON tab2.IdMasina = tab3.IdMasina
    GROUP BY tab1.DataOraPlecare,
    		tab1.DataOraSosire,
    		tab3.TipAutomobil,
    		tab3.TipCombustibil
    Les 3 tableaux je l'ai deja crees avec CREATE TABLE. (pas des problemes il s'agit des tableaux: PatrimoniuMasini,TipuriAutomobile,FoaieParcursMasina).

    La requete me retourne le resultat attendu mais la seule probleme c'est que je veux stoquer le resultat complet de cette requete dans un nouveau table nomme Rapport qui n'est pas cree.

    Donc je veux utiliser create table qui va retourner le resultat de la requete donne au-dessus.

  2. #2
    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 : 43
    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,

    Il te suffit de rajouter INTO entre le SELECT et le FROM :

    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
    SELECT tab1.DataOraPlecare,
    		tab1.DataOraSosire,
    		tab3.TipAutomobil,
    		tab3.TipCombustibil,
    		AVG(CombustibilConsumat) AS avgCombustibilConsumat
    INTO dbo.Rapport
    FROM dbo.FoaieParcursMasina AS tab1
    JOIN dbo.PatrimoniuMasini AS tab2
    	ON tab1.IdMasina = tab2.IdMasina
    JOIN dbo.TipuriAutomobile AS tab3
    	ON tab2.IdMasina = tab3.IdMasina
    GROUP BY tab1.DataOraPlecare,
    		tab1.DataOraSosire,
    		tab3.TipAutomobil,
    		tab3.TipCombustibil
    Mais pourquoi souhaites-tu stocker ce résultat dans une table supplémentaire ?
    Tu pourrais le remplacer par une vue (indexée ?) ...

    @++

  3. #3
    Membre éprouvé
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Par défaut
    Merci pour ton reponse elsuket!

    Je dois avoir un table (nomme Rapport) pour selectionner certains colonnes du tableau Rapport et faire un rapport en Crystal Reports.


    Meme si le probleme est resolu comment je peux creer une vue indexe? (si tu dis que ca c'est la meilleure solution?)

    P.S: (je sais creer une vue en sql server).

  4. #4
    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 : 43
    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
    Tu peux créer ta vue comme tu le fais d'habitude, mais en ajoutant WITH SCHEMABINDING :

    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
    CREATE VIEW maVue
    	WITH SCHEMABINDING
    AS
    SELECT tab1.DataOraPlecare,
    		tab1.DataOraSosire,
    		tab3.TipAutomobil,
    		tab3.TipCombustibil,
    		AVG(CombustibilConsumat) AS avgCombustibilConsumat
    FROM dbo.FoaieParcursMasina AS tab1
    JOIN dbo.PatrimoniuMasini AS tab2
    	ON tab1.IdMasina = tab2.IdMasina
    JOIN dbo.TipuriAutomobile AS tab3
    	ON tab2.IdMasina = tab3.IdMasina
    GROUP BY tab1.DataOraPlecare,
    		tab1.DataOraSosire,
    		tab3.TipAutomobil,
    		tab3.TipCombustibil
    Cette option signifie que tu ne peux pas modifier les colonnes qui participent à la définition de la vue, ce qui est important puisqu'on va ajouter un index à celle-ci.

    Si tu mets des index sur cette vue, alors les valeurs de cette vue seront physiquement stockées dans la base de données.
    Ce n'est pas le cas lorsque la vue n'est pas indexée : les valeurs de la vue sont calculées au moment de l'exécution de la requête.

    Il faut retenir que les requêtes SELECT spécifiant une vue ne peuvent pas contenir de jointures externes (pas de LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)

    Ensuite il faut trouver la/les colonne(s) dont les valeurs sont uniques pour pouvoir t'en servir comme clé d'un index cluster.
    Tu pourras ensuite écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE UNIQUE CLUSTERED INDEX IX_maVue_mesColonnes
    ON dbo.maVue (mesColonnes)
    Les colonnes que tu indexes dans la vue ne doivent pas être indexées dans les tables qui participent à la définition de la vue.

    A toi ensuite, suivant les requêtes que tu fais pour filtrer les données à montrer dans ton rapport, d'ajouter les index non-cluster pour gagner encore en performances !

    Attention tout de même : les vues indexées sont assez efficaces si les tables qui participent à la définition de la vue sont faiblement modifiées.
    Si les tables qui participent à la définition de la vue sont par exemple modifiées une seule fois par jour (INSERT, UPDATE, DELETE), puis consultées le reste du temps (SELECT), alors tu obtiendras de bons gains de performances.
    Dans le cas contraire, le coût de maintenance d'une vue indexée par le moteur de base de données peut être plus élevé que la maintenance des index sur l'ensemble des tables qui participent à la définition de la vue.

    @++

  5. #5
    Membre éprouvé
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Par défaut
    Merci beaucoup elsuket!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Les colonnes que tu indexes dans la vue ne doivent pas être indexées dans les tables qui participent à la définition de la vue.
    Bonjour,
    es-tu sur de ceci? Puisque la vue indexée est stockée physiquement (tout comme une table normale) SQL Server devrait permettre l'ajout d'index sur (Ctrl C + Ctrl V...) les tables qui participent à la définition de la vue et la vue indexée elle-même?

    Très chaleureusement,
    Cyrille

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2002] Copier les valeurs d'une requete dans une nouvelle table
    Par jeep6259 dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/06/2009, 23h04
  2. petit probleme de requete SQL dans formulaire
    Par kumo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/06/2007, 15h37
  3. [DEBUTANT] petit probleme de requete sql
    Par eclipse012 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2006, 15h10
  4. petit probleme de requete
    Par micco dans le forum Access
    Réponses: 2
    Dernier message: 19/04/2006, 11h11
  5. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36

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