Valeur de variable transact SQL

Fermé
Scabo - 6 févr. 2002 à 17:58
 Vinz95 - 16 juin 2011 à 00:58
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

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