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 :

Création Vue dynamique


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut Création Vue dynamique
    Bonjour,

    J'utilise une procedure qui fonctionne, dont voici le code


    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
     
    CREATE PROCEDURE [dbo].[pkCreateVueTEST]
     @datelecture varchar(20)
    AS
    BEGIN 
     SET NOCOUNT ON;
     SET DATEFORMAT DMY;
     
     
     --Supprime avant création
     IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MAVUE]'))
     DROP VIEW [dbo].[MAVUE]
     
     exec('create view [dbo].[MAVUE] as 
        select id, nom, datetest from MATABLE
        where datetest >= ''' + @datelecture + ''' ; ');
     
    END
    GO

    Mais je voudrais rendre le nom de la vue dynamique en utilisant le nom du poste :

    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
    20
    21
    CREATE PROCEDURE [dbo].[pkCreateVueTEST]
     @datelecture varchar(20)
    AS
    BEGIN 
     SET NOCOUNT ON;
     SET DATEFORMAT DMY;
     
     DECLARE @TEST as varchar(128);
     SET @TEST='[dbo].[MAVUE]'+(SELECT host_name());
     
     --Supprime avant création
     IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(@TEST))
     DROP VIEW @TEST
     
     exec('create view ' + @TEST + ' as 
        select id, nom, datetest from MATABLE
        where datetest >= ''' + @datelecture + ''' ; ');
     
    END
    GO
    Le drop view sur le nom de table, tel que je l'écris ne passe pas à la compilation.
    Pouvez-vous m'aider sur ce point ?

    Merci

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Puisque vous tu fais déjà un EXEC pour créer la vue, fais un EXEC pour la supprimer aussi...

    mais... c'est indiscret de te demander pourquoi tu fais ça ?

    pourquoi créer et supprimer des vues comme ca ?
    As tu l'intention des les indexer ?

  3. #3
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour

    Puisque vous tu fais déjà un EXEC pour créer la vue, fais un EXEC pour la supprimer aussi...

    mais... c'est indiscret de te demander pourquoi tu fais ça ?

    pourquoi créer et supprimer des vues comme ca ?
    As tu l'intention des les indexer ?
    Pas d'indiscrétion

    C'est simplement, parce que chaque poste client utilise ponctuellement cette vue en fonction du paramètre en entrée et ce paramètre est différent par poste. Elle me permet de faire une requete limité à un nombre de ligne "raisonable", car j'ai plus de 100 millions de ligne et ça augmente chaque année de 50 millions. Je gagne de cette manière, beaucoup de temps, car j'effectue sur les 25 millions de ligne résultant de la vue, plusieurs milliers de select incluant des COUNT et des SUM.

    Je vais passer sur exec, je n'y avait pas pensé.

    merci

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par castorcharly Voir le message
    Elle me permet de faire une requete limité à un nombre de ligne "raisonable",
    Une clause WHERE dans un requete fait cela très bien

    car j'ai plus de 100 millions de ligne et ça augmente chaque année de 50 millions. Je gagne de cette manière, beaucoup de temps,
    Il faut alors placer les index adéquat...

    car j'effectue sur les 25 millions de ligne résultant de la vue, plusieurs milliers de select incluant des COUNT et des SUM.
    Dans ce cas, il peut etre intéressant de créer une (et une seule) vue qui effectue ces calculs, et d'indexer cette vue.

  5. #5
    Membre éclairé
    Avatar de castorcharly
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2009
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2009
    Messages : 423
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Une clause WHERE dans un requete fait cela très bien


    Il faut alors placer les index adéquat...


    Dans ce cas, il peut etre intéressant de créer une (et une seule) vue qui effectue ces calculs, et d'indexer cette vue.
    La clause where est moins efficace car le champ de la clause n'est effectivement pas indexé et je n'ai pas la possibilité de faire ce que je veux sur cette table. D'où le passage via une view dyna qui me donne toute satisfaction en terme de vitesse.

    Merci pour ton aide

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par castorcharly Voir le message
    La clause where est moins efficace car le champ de la clause n'est effectivement pas indexé et je n'ai pas la possibilité de faire ce que je veux sur cette table.
    heu... pourquoi ?


    D'où le passage via une view dyna qui me donne toute satisfaction en terme de vitesse.
    :
    Si la vue n'est elle même pas indexée, je ne vois pas comment elle peut te donner de meilleures perf qu'une requete avec un filtre...

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

Discussions similaires

  1. TSQL Création Vue Dynamique
    Par BoromSikim dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/10/2010, 13h20
  2. Création vue avec test d'existence
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2004, 11h44
  3. Creation d'une vue dynamique ?
    Par Simeans2004 dans le forum Administration
    Réponses: 5
    Dernier message: 01/07/2004, 15h25
  4. [Plugin] Création d'une vue dynamiquement
    Par The Bonze dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 15/06/2004, 13h23

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