SQL Server -> Peut on avoir un champ Dynamique dans une clause WHERE ?

SQL Server -> Peut on avoir un champ Dynamique dans une clause WHERE ? - SQL/NoSQL - Programmation

Marsh Posté le 19-04-2006 à 10:35:22    

Bonjour :hello:
 
Je me posais une question, qui pourrais me faciliter le travail.
 
Peut on avoir un champ dynamique dans une clause WHERE ,
 
JE M'explique :  
 
J'ai une procédure stockée.
Si je lui passe en paramètre par exemple "3" j'aimerais que ma requete soit du style  
 
SELECT ... FROM ... WHERE CHAMP3 = 2
 
Si je lui passe en paramètre par exemple "7" j'aimerais que ma requete soit du style  
 
SELECT ... FROM ... WHERE CHAMP7 = 2
 
En gros si je lui passe X
 
SELECT ... FROM ... WHERE CHAMPX = 2
 
Est-ce possible ?
 
J'ai essayé dans ma procstock en faisant un  
 
DECLARE @ERR varchar(20)
SET @ERR = 'CHAMP'+@PARAM
 
Puis en mettant WHERE @ERR = 2
 
Mais sa ne fonctionne pas :(


---------------
Selon les dernières sources, il y aurait de plus en plus d'étrangers dans le monde...
Reply

Marsh Posté le 19-04-2006 à 10:35:22   

Reply

Marsh Posté le 19-04-2006 à 10:45:56    

Tu pourrais écrire toute ta requete en fonction de conditions dans une variable texte que tu executerais ensuite. Ex :
DECLARE  
 @v_SQL    VARCHAR(2000)
BEGIN
             SET @v_SQL = 'ta requete en fonction de tes conditions'
             EXEC (@v_SQL)
END

Reply

Marsh Posté le 19-04-2006 à 11:03:34    

Ha d'accord, pas con je vais essayé ca ;) :jap:


---------------
Selon les dernières sources, il y aurait de plus en plus d'étrangers dans le monde...
Reply

Marsh Posté le 21-04-2006 à 15:56:20    

autre solution, plus performante, plus plus chiante à lire/écrire :
 

Code :
  1. select val
  2. from matable
  3. where (@nomchamp != 'champ1' or champ1 = @valchamp)
  4. and (@nomchamp != 'champ2' or champ2 = @valchamp)
  5. and (@nomchamp != 'champ3' or champ3 = @valchamp)
  6. and (@nomchamp != 'champ4' or champ4 = @valchamp)
  7. and (@nomchamp != 'champ5' or champ5 = @valchamp)


 
Avec :
@nomchamp : le nom du champ sur lequel porte le filtre
@valchamp : la valeur de filtre sur ce champ

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed