Valeur de variable transact SQL

Scabo -  
 Vinz95 -
J'ai besoin d'utiliser la valeur d'une variable dans un SELECT en Transact SQL.

Par exemple:

SET @variable = 'Identifiant'
SELECT [valeur(@variable)] FROM CLIENTS

En clair, je voudrais retourner l'Identifiant des clients, mais sans écrire ma requête en dur.

Un peu comme le eval du php (ou evaluate je ne sais plus)

C'est possible ???

2 réponses

  1. sebsauvage
     
    Ok c'est normal :
    Quand tu fais un EXEC, tu es dans un autre environnement d'exécution. Dans ce nouvel environnement, la variable @BRACT n'a jamais été déclarée, ça provoque donc une erreur.

    La solution, c'est une table temporaire avec un INSERT...EXECUTE:

    DECLARE @BRACT varchar(1)
    SET @BRACT = 'N'
    CREATE TABLE #TMP (c varchar(1))
    INSERT INTO #TMP EXEC ('SELECT blabla FROM Entreprises_Af')
    SELECT TOP 1 @BRACT = c from #TMP
    PRINT @BRACT
    DROP TABLE #TMP

    ça n'est pas très élégant, mais je ne vois pas d'autres solution...
    4
  2. sebsauvage
     
    Tu peux pouvoir retourner une colonne dont le nom est stocké dans @variable, c'est ça ?

    DECLARE @requete nvarchar(4000)
    SET @variable = 'Identifiant'
    SET @requete = 'SELECT '+@variable+' FROM CLIENTS'
    EXEC(@requete)

    ça devrait passer :-)
    0
    1. Scabo
       
      Merci :)
      Mais en fait, je me suis mal expliquée, et c'est plus compliqué que cela.
      Voici ce que je veux faire :

      DECLARE @variable varchar(15), @requete varchar(255)
      SET @variable = '@BRACT'

      DECLARE @BRACT varchar(1)
      SET @BRACT = 'N'

      SET @requete = 'SELECT ' + @variable + ' FROM Entreprises_Af '
      PRINT @requete

      EXEC(@requete)


      Mais ça ne marche pas !!!! Voilà ce que cela me donne :

      'La variable '@BRACT' doit être déclarée.'
      Mais elle est déclarée !!!!
      0
    2. Floppeur
       
      Non, comme dit au dessus ta variable n'est pas déclarée dans l'environnement de l'EXEC. Il faut donc déclarée ta variable dans ton exec ou travailler avec une table temporaire #Table.
      0
    3. Vinz95
       
      Ou sinon tu places :
      DECLARE @BRACT varchar(1)
      SET @BRACT = 'N'
      avant de faire appel à ta variable... Parce que sinon, elle n'est pas déclarée...
      0