2009-03-24 7 views
0

Ich habe die folgende Anweisung in einer gespeicherten Prozedur. Ich übergebe den Namen der Spalte als Parameter und auch den zu prüfenden Wert in einer anderen Variablen. Ist es möglich, dies in SQL Server zu erreichen. Lass es mich wissen, bitte. SQL Server Name der Spalten als Variablen


 SELECT CaseId FROM app_Case 
     where @[email protected] 
     ORDER BY CreatedDate DESC 

Antwort

2

Ich denke, die einzige Möglichkeit, dies zu tun, um eine dynamische SQL-Anweisung zu erzeugen wäre. Die andere Option wäre, alle Spaltenwerte als Parameter zu verwenden, sie standardmäßig auf null zu setzen und danach zu prüfen.

dh

WHERE (cola = @cola OR @cola IS NULL) AND (colb = @colb OR @colb IS NULL) etc. 
+0

Sie können dies tun, ohne jeden Parameter in und ohne es dynamisch zu machen – JoshBerke

1

Sie müssen eine Reihe von SQL innerhalb der SP erstellen und auszuführen.

Declare @SQL As VARCHAR(8000) 

SET @SQL = 'SELECT CaseId FROM app_Case where ' + 
      @SearchCat + ' = '' + @keywords + 
      '' ORDER BY CreatedDate DESC' 

EXEC(@SQL) 
+0

Ihre Abfrage ist nicht ganz richtig. Ihnen fehlen einige einfache Anführungszeichen um die @ keywords-Variable. – codeConcussion

1

Sie können eine dynamische Abfrage erstellen Im Wesentlichen erstellen Sie eine Zeichenfolge und führen sie dann aus. (Achten Sie auf SQL-Injection-Angriffe).

würde Ein weiterer Ansatz, einen Fall Aussage, die verwenden, wenn Sie einen Versuch wert sein könnte nicht viele Möglichkeiten:

ist
select CaseId from app_Case 
where case when @searchCat='field1' 
     then field1 
     else @searchVal 
     end = @searchVal and 
     case when @searchCat='field2' 
     then field2 
     else @searchVal 
     end = @searchVal 

Ein anderer Ansatz oder Klauseln, die gleiche Sache tun:

select CaseId from app_Case 
    where (@searchCat='Field1' and [email protected]) OR 
     (@serachCat='Field2' and [email protected]) 
+0

Ah ja, das würde funktionieren ... ein bisschen chaotisch obwohl – atfergs

+0

Der zweite Ansatz ist nicht unordentlich, dann jede Spalte haben ihren eigenen Parameter .... es gibt keine großartige Lösung ... – JoshBerke

Verwandte Themen