2009-03-24 7 views

Répondre

2

Je pense que la seule façon de le faire serait de générer une instruction SQL dynamique. L'autre option consisterait à prendre toutes les valeurs de colonne en tant que paramètres, par défaut à null, et vérifier cela.

-à-dire

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

Vous pouvez le faire sans prendre chaque paramètre dans et sans le rendre dynamique – JoshBerke

1

Vous devez créer une chaîne de SQL dans la SP et l'exécuter.

Declare @SQL As VARCHAR(8000) 

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

EXEC(@SQL) 
+0

Votre requête n'est pas tout à fait raison. Il vous manque des guillemets simples autour de la variable @keywords. – codeConcussion

1

Vous pouvez créer une requête dynamique Essentiellement, vous construisez une chaîne, puis vous l'exécutez. (Attention aux attaques par injection SQL).

Une autre approche serait d'utiliser une déclaration de cas qui, si vous n'avez pas beaucoup d'options pourrait être intéressant d'essayer:

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 

Une autre approche est la même chose en utilisant ou clauses:

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

Ah oui, ça marcherait ... un peu brouillon bien que – atfergs

+0

La deuxième approche n'est pas messier alors que chaque colonne a son propre paramètre .... il n'y a pas de grande solution ... – JoshBerke

Questions connexes