2010-12-06 6 views
2

Ich bin etwas verwirrt über die beste Möglichkeit zum Erstellen einer gespeicherten Prozedur, die eine SELECT-Anweisung basierend auf Tabellenzeilenwerte in einer anderen Tabelle zurückgibt.Übergeben Sie Spalten als Variablen an eine gespeicherte Prozedur in T-SQL

Das Problem, da dies am besten beschrieben:

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  

Nach dem, was der Benutzer gibt in der queryValue Spalte in der reportParameters Tabelle, ich möchte eine gespeicherte Prozedur konstruieren, was eine SELECT-Anweisung ausgeführt wird, wie dies:

SELECT * FROM reportValues WHERE region = 'NO' 

Wenn der Benutzer eingegeben hat folgende Werte:

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

Aber es könnte auch sein:

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

Wenn der Benutzer eingegeben hatte:

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

Mein erster Gedanke, es zu tun war eine Schleife zu machen, dass die SELECT-Anweisung in einen String-Konstrukten Variable und führt sie aus. Aber es wurde eine elegantere Lösung?

Antwort

1

Ich bin da nicht sicher ist, ob die Abfragen haben ein kleines, bekannt, von Feldern festgelegt, dann könnte man ihnen eine Liste aller in der, wo eine Auswahl begleitet:

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

Es gibt keine kurz- Schaltung Auswertung, aber es könnte immer noch die gewünschte Wirkung haben. Ansonsten ist es auf dynamisches SQL und EXEC().

Verwandte Themen