2010-11-25 23 views
0

Je veux utiliser un LIKE dans sp_executesql mais je ne peux pas construire l'instruction, je reçois des erreurs, c'est un exemple simple juste pour montrer le cas:Comment utiliser un LIKE dans sp_executesql? Je ne peux pas construire l'instruction

SELECT @SqlStatement = @SqlStatement +  
    (CASE @SearchType 
    WHEN 'L' THEN 
     + N' AND aa.Location = COALESCE(@SearchCriteria, '''') ' 
    WHEN 'M' THEN 
+ N' AND aa.ManufactureName LIKE COALESCE(@SearchCriteria, '''') ' 
    WHEN 'P' THEN 
     + N' AND OH.PONumber = COALESCE(@SearchCriteria, '''')' 
    END) 
+1

quelles erreurs recevez-vous .. –

+0

Cela ressemble à un « concernant » morceau de conception de code mûr et prêt à injecter. Regardez en utilisant des procédures stockées comme point de départ. –

Répondre

1

Think à propos de l'écriture procédure pas de requête.

1

supprimer le signe plus après THEN

WHEN 'x' THEN N'some X' 
concaténation

est effectuée par le signe plus dans la première ligne, et l'expression CASE tient seulement le deuxième opérande. Comme l'a dit Devio, vous devez supprimer le signe plus après la clause THEN

0

En outre, si @SearchCriteria est un paramètre que vous recevez comme @SearchType, vous devez également concaténer sa valeur et ne pas l'utiliser dans l'instruction que vous construisez. Votre requête doit être quelque chose comme ceci:

SELECT @SqlStatement = @SqlStatement +  
    (CASE @SearchType 
    WHEN 'L' THEN 
     N' AND aa.Location = COALESCE('''[email protected]+''', '''') ' 
    WHEN 'M' THEN 
    N' AND aa.ManufactureName LIKE COALESCE(''%'[email protected]+'%'', '''') ' 
    WHEN 'P' THEN 
     N' AND OH.PONumber = COALESCE('''[email protected]+''', '''')' 
    END) 
0
WHERE 
(
    (@SearchType = 'L' 
     AND aa.Location = @SearchCriteria) 
    OR (@SearchType = 'M' 
     AND aa.ManufactureName LIKE REPLACE(@SearchCriteria, '%', '[%]') + '%') 
    OR (@SearchType = 'P' 
     AND OH.PONumber = @SearchCriteria) 
)