2010-12-06 4 views
2

Je suis un peu perplexe sur la meilleure façon de construire une procédure stockée qui renvoie une instruction SELECT basée sur les valeurs de ligne de table dans une autre table.Transmettre des colonnes en tant que variables à une procédure stockée dans T-SQL

Le problème peut être décrit comme ceci:

Table Name: reportValues 
-------------------------------------------- 
ID  name  date  region 
-------------------------------------------- 
1  Stefan  2010-01-01 UK 
2  David  2010-01-05 SE 
3  Anna  2010-01-12 NO 
4  Marie  2010-01-15 NO 


Table Name: reportParameters 
------------------------------- 
ID  column  queryValue 
------------------------------- 
1  ID  
2  name  
3  date  
4  region  

Sur la base de ce que l'utilisateur entre dans la colonne queryValue dans le tableau reportParameters, je veux construire une procédure stockée qui exécute une instruction SELECT, comme ceci:

SELECT * FROM reportValues WHERE region = 'NO' 

Si l'utilisateur avait saisi les valeurs suivantes:

Table Name: reportParameters 
------------------------------- 
ID  column  queryValue 
------------------------------- 
1  ID  
2  name  
3  date  
4  region  NO 

Mais il pourrait aussi bien être:

SELECT * FROM reportValues WHERE region = 'NO' AND name = 'Anna' 

Si l'utilisateur est entré:

Table Name: reportParameters 
------------------------------- 
ID  column  queryValue 
------------------------------- 
1  ID  
2  name  Anna 
3  date  
4  region  NO 

Ma première pensée de le faire était de faire une boucle qui construit la instruction SELECT dans une chaîne variable et l'exécute. Mais ça doit être une solution plus élégante?

Répondre

1

Je ne suis pas sûr qu'il y est, si les requêtes ont une petite, connue, un ensemble de champs, vous pouvez les énumérer tous dans le accompagné d'un sélecteur où:

(IF NOT NULL reportParameters.field AND reportParameters.field = reportValues.field) 

Il n'y a pas à court évaluation du circuit, mais il pourrait encore avoir l'effet désiré. Sinon, il s'agit de SQL dynamique et EXEC().

Questions connexes