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 :

creation d'alias de table / sql server 2005


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut creation d'alias de table / sql server 2005 >> SYNONYM
    Bonjour,

    Je bloque sur un pti pb.

    Le contexte. J'ai créer une procédure qui fait quelques traitements...

    Hors, en fonction de la valeur d'un champ, transmis en paramètre, je vais travailler sur des tables différentes, qui ont les mêmes colonnes. Ces tables contiennent des configurations liés au champ transmis en paramètre.

    Donc au lieu de faire 4 tests à chaque instructions pour savoir sur quels tables travaillés, j'aurais voulu créer un alias sur ma table que je pourrai utiliser tout au long de ma procédure, et la détruire en fin de procédure.

    Je suis au debut partie sur les vues, mais cela ne fonctionne pas dans une procédure stockée, et créer une vue pour recréer une table n'est pas très optimisé.

    Après recherche, je pencherai sur l'utilisation de "Create Type" mais je n'arrive pas à en trouver la bonne syntaxe.

    Je pensai aussi éventuellement créer une vue regroupant toutes mes tables en ajoutant mon fameux champ transmis, mais j'ai peur que cette vue deviennent trop lourd.

    Auriez vous quelques pistes de recherche ?

    Merci par avance.

  2. #2
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    bonjour,
    Si j'ai bien saisie votre propos vous souhaitez construire dynamiquement la reqûete en fonction de la valeur de l'un des paramètres.
    Pour la construction dynamique de requete il est nécessaire d'utiliser sp_executesql.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Auriez vous quelques pistes de recherche ?
    Oui : pourquoi avez vous créé n tables ayant les mêmes colonnes ??? C'est une erreur dans le modèle. Il suffit de tout regrouper dans la même table ! En vertu d'une principe simple : même infos = même table.
    Si vous voulez distinguer les lignes de votre table, rajoutez simplement une colonne.
    Vos requêtes deviendront, simples, élégantes efficaces et rapide si vous mettez les index adéquat. De plus vous respecterez l'art de la modélisation de données et à terme irez 10 fois plus vite en développement !

    A +

  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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il vous faudrait plutôt regrouper ces 4 tables en une seule, et il vous sera peut-être nécessaire ensuite d'ajouter une colonne à cette nouvelle table pour faire la distinction entre les 4 "sous-ensembles" donc vous disposez actuellement dans 4 tables.

    Je pensai aussi éventuellement créer une vue regroupant toutes mes tables en ajoutant mon fameux champ transmis, mais j'ai peur que cette vue deviennent trop lourd.
    Partant ce que je viens de vous proposer, il vous "suffit" d'indexer proprement la table unique en étudiant les requêtes qui la spécifient, notamment leur plan

    @++

  5. #5
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    ha ben on a posté en même temps, je n'ai donc fait que vous confirmer ce que vous propose SQLPro

    @++

  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 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    oui, mais moi j'ai gagné !!!! na

    A +

  7. #7
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Il est fou SQLPro

    @++

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Je m'attendais à la réponse, il faut créer une seul table, problème de conception.
    Mais malheureusement cela n'est pas possible pour plusieurs raisons.... mais là n'est pas le débat.

    je ne veux pas non plus construire ma requete dynamiquement.

    Je pense que la solution serait de construire une vue dans laquelle je stockerai l'intégralité des colonnes identiques pour interroger cette vue avec mon fameux champ en paramètre dans la clause.

    En gros ma demande était :
    au lieu d'avoir la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * from TABLE A where.....
     
    declare A as ma table TABLE
    >> select * from A
    Merci toutefois d'avoir essayer de resoudre mon problème.
    Je laisse le post ouvert, si un jour j'ai la solution je viendrai la poster.

  9. #9
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Mais malheureusement cela n'est pas possible pour plusieurs raisons
    C'est au départ que la conception est mauvaise, et maintenant que la base de données à commencé à vivre, difficile de revenir en arrière ...

    Vous pouvez créer une vue indexée, mais je ne sais pas sur quelle colonne de chaque table vous allez pouvoir poser l'index cluster, puisqu'il faut que les valeurs de clé soient évidemment uniques ...

    declare A as ma table TABLE
    Plus précisément cela donnerait :

    Ne faites pas cela car aucune statistique n'est maintenue sur les variables de type table, donc il n'est alors pas possible à l'optimiseur de requêtes de calculer un bon plan de requête.
    De plus ces "tables" sont stockées dans TempDB, base de données système à laquelle le moteur de base de données a largement recours.

    Vous vous en sortirez mieux avec une vue indexée

    @++

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    l'exemple n'etait pas pour déclarer une table variable.

    Juste pour expliquer que je voudrais créer un alias sur ma table, et que cette alias soit visible tout le long de la procédure, et non juste sur une requête.

  11. #11
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    je ne veux pas non plus construire ma requete dynamiquement.
    Qu'est-ce qui vous en empêche ?

    Juste pour expliquer que je voudrais créer un alias sur ma table, et que cette alias soit visible tout le long de la procédure, et non juste sur une requête.
    Cela n'est pas possible, les alias de tables participant à une jointure ne sont visibles que pour la requête en cours.
    Je ne vous le conseille pas, mais vous pouvez créer des synonymes (CREATE SYNONYM), mais je commence à ne plus comprendre votre démarche ...

    @++

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Merci, c'est exactement ce que je cherchais.

    pour expliquer en gros ma demande :
    j'ai plusieurs tables, différentes mais semblables sur quelques champs
    PRODUIT_A, PRODUIT_B....


    Je crée une procédure qui execute un travail sur ces tables.
    une variable passé en paramètre me donne sur quel produit je travaille.
    Cette procédure est multi produit, et au lieu d'interroger une variable pour savoir sur quelle table travailler, le synonym me permet de déclarer une fois pour toutes mes tables de travail.

    ceci me permet de ne pas écrire x fois la même procédure pour des tables de noms différents, ou de tester ma variable à chaque requête de ma procédure.

    Ceci combiné avec une vue me permet donc d'optimiser un max ma procédure, en nb de ligne de code, en performance, et en lecture.

    Merci.

  13. #13
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Ceci combiné avec une vue me permet donc d'optimiser un max ma procédure, en nb de ligne de code, en performance, et en lecture.
    A tester, car il faut quand même que le moteur résolve les synonymes ...
    Je ne sais pas quel impact cela a sur les performances ...

    @++

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

Discussions similaires

  1. Probleme de creation d'une BDD avec SQL server 2005 et vista
    Par necer_cheniki dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 22/06/2008, 10h15
  2. [debutant]Creation de db et table sql server 2005
    Par christopheEU dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/04/2008, 09h18
  3. Problème taille d'une table sql server 2005
    Par oadin dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/02/2008, 09h12
  4. Alter table Sql server 2005
    Par papawemba dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/01/2008, 23h48
  5. [VBA]Inséré un dataset dans une table sql Server 2005
    Par Yotho dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/05/2007, 17h17

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