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 :

Selectionné une colonne d'une table passé en paramétrer à une PS


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut Selectionné une colonne d'une table passé en paramétrer à une PS
    Bonjour,

    Je travaille sous SQL-SERVER 2005.

    Et je souhaite dans une procédure stockée avoir un truc du genre :

    Select MATABLE.COLONNE1, MATABLE.COLONNE2, MATABLE.COLONNE = @param from MATABLE

    Je souhaiterai ne pas faire execute dans la ps.

    Merci d'avance

  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
    22 036
    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 : 22 036
    Billets dans le blog
    6
    Par défaut
    Sans SQL Dynamique cela n'est pas possible.

    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é
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Il me semble que je dois utiliser sysobject. Mais je ne suis pas sûre et surtout je ne sais pas comment.

    Merci pour toute piste.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Désolé SQLPRO, je viens de voir a l'instant ton message.

    Vu ton profil, je supose que tu dois être sûre de ce que tu dis....

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Pourtant il me semble qu'il est possible de vérifier si une colonne d'une table existe(Je l'ai déja fais). Donc si on peut vérifier sont existance, je peux donc faire ce que je demande sans faire un execute. Mon problème c'est que je ne sais plus comment on fait pour déja vérifier l'existance d'une colonne.

    Merci d'avance pour toute aide.

  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
    22 036
    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 : 22 036
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   INFORMATION_SCHEMA.COLUMNS
    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/ * * * * *

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Ok Merci.

    Pour résumer, sans SQL Dynamique cela n'est pas possible. Dons je suis obligé de'utiliser un excecute. mais je vais dans procédure vérifier avant si ma colonne de ma table existe avec SELECT * FROM INFORMATION_SCHEMA.COLUMNS.

    merci.

  8. #8
    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
    Bonsoir,

    Vosu ne devez pas utiliser SELECT * dans une requête. Cette commande ne devrait servir qu'à regarder rapidement quelles données stockent vos tables, mais ne le mettez pas dans le code d'une procédure stockée, car cela est contre-performant.

    Dans votre cas, vous pouvez par exemple écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF EXISTS
    (
    	SELECT 1
    	FROM INFORMATION_SCHEMA.COLUMNS
    	WHERE COLUMN_NAME = maColonne
    )
    BEGIN
    	...
    END
    Si vous utilisez du code SQL Dynamique, mieux vaut utiliser la procédure stockée sp_executesql qui vous permet de conserver les plans d'exécution si seules les valeurs des paramètres changent, ce qui n'est pas le cas avec l'instruction EXEC (maCommandeSQL)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Par défaut
    Merci ElsuKet.

    Ok je teste tout cela et je vous tiens au courant.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 036
    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 : 22 036
    Billets dans le blog
    6
    Par défaut
    Le SELECT 1 ou SELECT * dans le EXISTS c'est la même chose... Je dirais même que pour certains moteurs il vaut mieux mettre le SELECT * que le moteur optimisera mieux qu'une constante. Le seul cas ou la constante est attendue c'est lorsqu'il y a un GROUP BY. Dans ce cas, le SELECT NULL est préférable.

    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/ * * * * *

  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 : 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,

    Je savais que le COUNT(*) est optimisé, mais pas le SELECT *.
    Alors j'ai testé, pour savoir, avec SQL Server 2005 Express installé sur mon PC perso:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 1
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME = 'toto'
    Nous donne:

    Temps d'analyse et de compilation de SQL Server :
    , Temps UC = 25 ms, temps écoulé = 25 ms.
    Temps d'analyse et de compilation de SQL Server :
    , Temps UC = 0 ms, temps écoulé = 1 ms.

    (0 ligne(s) affectée(s))
    Table 'Worktable'. Nombre d'analyses 0, lectures logiques 0, ...
    Table 'syscolpars'. Nombre d'analyses 1, lectures logiques 2, ...

    SQL Server \endash Temps d'exécution :
    , Temps UC = 0 ms, temps écoulé = 1 ms.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME = 'toto'
    Nous donne:

    SQL Server \endash Temps d'exécution :
    , Temps UC = 0 ms, temps écoulé = 1 ms.
    Temps d'analyse et de compilation de SQL Server :
    , Temps UC = 0 ms, temps écoulé = 1 ms.

    (0 ligne(s) affectée(s))
    Table 'syscolpars'. Nombre d'analyses 6, lectures logiques 13, ...
    Table 'sysschobjs'. Nombre d'analyses 1, lectures logiques 5, ...

    SQL Server \endash Temps d'exécution :
    , Temps UC = 0 ms, temps écoulé = 1 ms.
    Plus de pages sont lues par le SELECT * mais le temps de compilation et d'exécution est beaucoup plus faible


  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 036
    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 : 22 036
    Billets dans le blog
    6
    Par défaut
    Relisez ce que j'ai dit : DANS LE EXISTS !
    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/ * * * * *

  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 : 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
    Pas seulement apparement ou alors je comprends plus ...

  14. #14
    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
    Je viens d'exécuter la même requête avec un IF EXISTS, et les deux requêtes donnent le même temps de compilation et d'exécution, et le même nombre de pages lues :

    , Temps UC = 0 ms, temps écoulé = 1 ms.
    Table 'Worktable'. Nombre d'analyses 0, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'syscolpars'. Nombre d'analyses 1, lectures logiques 2, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 036
    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 : 22 036
    Billets dans le blog
    6
    Par défaut
    Faire des test sur une volumétrie faible n'a aucun sens !
    Imagine que l'on donne au sportif de formule 1, 100m de circuit pour faire leur essais afin de savoir qui va partir en pôle position...

    Il faut au moins que tes tables aient quelque centaines de pages pour pouvoir mesurer quoi que ce soit !

    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/ * * * * *

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

Discussions similaires

  1. table basée sur req - une colonne = calc de deux autres
    Par chapeau_melon dans le forum WinDev
    Réponses: 0
    Dernier message: 04/04/2008, 10h59
  2. Réponses: 3
    Dernier message: 06/11/2006, 08h14
  3. [sql 2005]: changer le nom d'une colonne dans un table
    Par TheLittle dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2006, 15h29
  4. Réponses: 2
    Dernier message: 21/04/2006, 12h09
  5. Renommer une colonne avec ALTER TABLE...
    Par David.V dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2004, 10h33

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