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 :

Possibilité de récupérer valeur de Column_Name


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut Possibilité de récupérer valeur de Column_Name
    Salut à tous,
    Je voudrais dans une procédure stockée, récupéré le column_name et la valeur de la colonne d'une table parametre mais je n'y arrive pas du tout.

    Quand j'écris ceci, j'obtiens effectivement les différentes colonnes de ma table mais je veux récupérer la valeur de données qui est dans chaque colonne.
    Est ce possible et comment procéder?

    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
     
    USE [P2014]
    GO
    /****** Object:  StoredProcedure [COMPTABILITE].[PARAMETRE_COMPTABLE_COLNAME]    Script Date: 18/07/2013 18:38:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER PROCEDURE [COMPTABILITE].[PARAMETRE_COMPTABLE_COLNAME]
      AS
     SET NOCOUNT ON
     
    SELECT COLUMN_NAME,VALUE_COLUMN
    FROM INFORMATION_SCHEMA.columns
    WHERE table_name = 'PARAMETRE_COMPTABLE'
    ORDER BY ORDINAL_POSITION

  2. #2
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Salut,

    Voici une requête qui va te construire d'autres requêtes que tu pourras lancer afin d'avoir les résultats voulues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT
    	'SELECT ' + COLUMN_NAME + ' AS VALUE_COLUMN, ''' + COLUMN_NAME + ''' AS COLUMN_NAME FROM PARAMETRE_COMPTABLE' 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'PARAMETRE_COMPTABLE'
    ORDER BY ORDINAL_POSITION
    Tu peux envisager de les lancer automatiquement et mettre les résultats dans une table temporaire et puis faire un SELECT à la fin par exemple.
    "Toute technologie suffisamment avancée est indiscernable de la magie." - Arthur C. Clarke

    Evan Barke - Ingénieur d'Etudes et Développement SQL Server
    Blog SQL Server, T-SQL, SSIS, Administration www.transactivesql.com
    Twitter - TransactiveSQL
    N'oubliez pas les boutons et

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci pour l'apport mais le résultat que j'obtiens n'est pas ce que j'envisage. Peut être je me suis mal libellé. Je m'explique. J'ai une table paramatre_comptable (ID_AUTO, Racine, Compte,CompteVente,CompteAchat) et dans cette table, il y a une ligne de données.
    ID_AUTO = 1
    Compte = 411
    Compte Vente = 701
    Compte Achat = 701

    Je veux récupérer et les nom des champs(ID_AUTO, Racine, Compte,CompteVente,CompteAchat) et la valeur de chaque présenté comme suit :

    Column_NAme Valeur
    ID_AUTO 1
    Compte 411
    Compte Vente 701
    Compte Achat 701

    à partir de ma SP.

    Merci de m'aider

  4. #4
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Tu pourras toujours tourner ton écran 90° et lire les résultats comme ça

    Non mais sérieusement, les requêtes générées par la requête que je t'ai donnée vont normalement te retourner ce que tu cherche si tu les lance avec des UNION ALL entre chaque requête ou une à une.
    "Toute technologie suffisamment avancée est indiscernable de la magie." - Arthur C. Clarke

    Evan Barke - Ingénieur d'Etudes et Développement SQL Server
    Blog SQL Server, T-SQL, SSIS, Administration www.transactivesql.com
    Twitter - TransactiveSQL
    N'oubliez pas les boutons et

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Je n'arrive toujours pas à obtenir la valeur de la colonne.
    Comme cette SP qui me renvoie, le nom de la colonne et son type, je veux récupérer le nom de la colonne et la valeur de donnée qu'il contient:
    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
     
    USE [P2014]
    GO
    /****** Object:  StoredProcedure [COMPTABILITE].[PARAMETRE_COMPTABLE_COLNAME]    Script Date: 19/07/2013 10:34:10 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER PROCEDURE [COMPTABILITE].[PARAMETRE_COMPTABLE_COLNAME]
      AS
     SET NOCOUNT ON
     
     
    SELECT
    COLUMN_NAME  AS NOM, COLUMNS.DATA_TYPE as Type
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'PARAMETRE_COMPTABLE'
    ORDER BY ORDINAL_POSITION
    Veuillez m'aider si c'est faisable en sql server mais si ce n'est pas faisable, veuillez me le dire svp.

    Merci

  6. #6
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par eddyphan Voir le message
    Merci pour l'apport mais le résultat que j'obtiens n'est pas ce que j'envisage. Peut être je me suis mal libellé. Je m'explique. J'ai une table paramatre_comptable (ID_AUTO, Racine, Compte,CompteVente,CompteAchat) et dans cette table, il y a une ligne de données.
    C'est problématique : pourquoi n'y aurait-t-il qu'une seule ligne de données dans une table ?

    Sinon, je vous invite à faire une recherche avec les termes PIVOT et SQL DYNAMIQUE.

  7. #7
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Je suis d'accords, c'est un peu bizarre d'avoir une table n'ayant qu'un seul tuple mais bon. Voici le code qui va faire ce travail bizarre pour toi

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    SELECT
    	'INSERT INTO #Values SELECT TOP 1 ' + COLUMN_NAME + ' AS VALUE_COLUMN, ''' + COLUMN_NAME + ''' AS COLUMN_NAME FROM ' + table_name AS REQUETE,
    	0 AS Treated INTO #ColonnesATraiter
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'PARAMETRE_COMPTABLE'
    ORDER BY ORDINAL_POSITION
     
    DROP TABLE #ColonnesATraiter
     
     
    CREATE TABLE #Values (Valeur NVARCHAR(50), Nom NVARCHAR(50))
    DECLARE @Requete NVARCHAR(4000)
     
    WHILE EXISTS (SELECT
    	1
    FROM #ColonnesATraiter
    WHERE Treated = 0)
     
    BEGIN
    SELECT TOP 1
    	@Requete = REQUETE
    FROM #ColonnesATraiter
    WHERE Treated = 0
     
    EXEC sp_executeSQL @Requete
     
    UPDATE #ColonnesATraiter
    SET treated = 1
    WHERE REQUETE = @Requete
     
    END
     
    SELECT
    	Nom,
    	Valeur
    FROM #Values
    "Toute technologie suffisamment avancée est indiscernable de la magie." - Arthur C. Clarke

    Evan Barke - Ingénieur d'Etudes et Développement SQL Server
    Blog SQL Server, T-SQL, SSIS, Administration www.transactivesql.com
    Twitter - TransactiveSQL
    N'oubliez pas les boutons et

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    C'est problématique : pourquoi n'y aurait-t-il qu'une seule ligne de données dans une table ?

    Sinon, je vous invite à faire une recherche avec les termes PIVOT et SQL DYNAMIQUE.
    Merci pour l'aide. Au fait c'est parce que c'est une table paramètre que j'ai prévu une seule ligne de données.

  9. #9
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Bonjour, j'aimerais savoir comment ça s'est passé pour l'intégration de ce script? Tu as pu faire ce que tu as voulu?
    "Toute technologie suffisamment avancée est indiscernable de la magie." - Arthur C. Clarke

    Evan Barke - Ingénieur d'Etudes et Développement SQL Server
    Blog SQL Server, T-SQL, SSIS, Administration www.transactivesql.com
    Twitter - TransactiveSQL
    N'oubliez pas les boutons et

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    non,ça n'a pas marché. C'est plus que compliqué et ça me retarde aussi dans mon projet. Je suis entrain de voir si je mettre tous les parametres comme des ligne dans une table qui a pour champs( ID_AUTO, LibParametre,ValeurParametre).
    Merci beaucoup pour toutes vos réponses.
    Je pensais que c'était chose facile de récupérer la valeur d'une colonne connaissant son Name mais c'est compliqué.

  11. #11
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Avoir une table de paramètres "en lignes" est nettement plus approprié qu'une table "en colonnes" qui vous forcerait à changer la structure de vos table si vous souhaitiez rajouter un paramètre.


    Sinon, s'il s'agit d'une requête unitaire, que la structure de la table est toujours la même, et puisqu'il n'y a qu'une seule ligne, vous pouvez l'écrire tout simplement :

    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
     
    SELECT 'ID_AUTO' AS Column_Name
              ,ID_AUTO AS Value
      FROM PARAMETRE_COMPTABLE
    UNION ALL
    SELECT 'Compte ' AS Column_Name
              ,Compte AS Value
      FROM PARAMETRE_COMPTABLE
    UNION ALL
    SELECT 'Compte Vente' AS Column_Name
              ,[Compte Vente] AS Value
      FROM PARAMETRE_COMPTABLE
    UNION ALL
    SELECT 'Compte Achat  ' AS Column_Name
              ,[Compte Achat] AS Value
      FROM PARAMETRE_COMPTABLE

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut MERCI ET GRAND MERCI
    Citation Envoyé par Rei Ichido Voir le message
    Avoir une table de paramètres "en lignes" est nettement plus approprié qu'une table "en colonnes" qui vous forcerait à changer la structure de vos table si vous souhaitiez rajouter un paramètre.


    Sinon, s'il s'agit d'une requête unitaire, que la structure de la table est toujours la même, et puisqu'il n'y a qu'une seule ligne, vous pouvez l'écrire tout simplement :

    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
     
    SELECT 'ID_AUTO' AS Column_Name
              ,ID_AUTO AS Value
      FROM PARAMETRE_COMPTABLE
    UNION ALL
    SELECT 'Compte ' AS Column_Name
              ,Compte AS Value
      FROM PARAMETRE_COMPTABLE
    UNION ALL
    SELECT 'Compte Vente' AS Column_Name
              ,[Compte Vente] AS Value
      FROM PARAMETRE_COMPTABLE
    UNION ALL
    SELECT 'Compte Achat  ' AS Column_Name
              ,[Compte Achat] AS Value
      FROM PARAMETRE_COMPTABLE
    C'est la réponse exacte à mon souci. Je vous remercie sincèrement.
    Si je sais que je n'ai plus à ajouter d'autres paramètre à ma table, vous me conseillez toujours une table en ligne?

    Merci à toute la communauté pour leurs apports.

  13. #13
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Oui, c'est nettement plus propre d'avoir une table avec une ligne par paramètre. Vous n'envisagez pas pour l'instant une évolution, mais qui sait ce que deviendra l'application ?
    En outre, cela sera plus clair si quelqu'un d'autre relit votre code (sinon il pourrait avoir envie, par exemple, d'insérer une 2ème ligne dans votre table alors que tous vos traitements s'attendent à n'y trouver qu'une seule ligne).

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

Discussions similaires

  1. [POI]Récupérer valeur cellule suivant format
    Par leminipouce dans le forum Documents
    Réponses: 1
    Dernier message: 27/10/2005, 08h52
  2. Récupérer valeur contrôle en dynamique via requête
    Par nicburger dans le forum Access
    Réponses: 10
    Dernier message: 15/09/2005, 15h41
  3. [ActionScript] Récupérer valeur balise <param />
    Par JohnBlatt dans le forum Flash
    Réponses: 1
    Dernier message: 18/07/2005, 14h50
  4. CR9 - Récupérer valeurs multiples d'un champ paramètre
    Par CR9-Deb dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/07/2005, 16h08
  5. récupérer valeur d'un ID après insertion
    Par rikidi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/08/2003, 22h21

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