web-dev-qa-db-fra.com

Utilisation de l'opérateur LIKE avec des paramètres de procédure stockée

J'ai une procédure stockée qui utilise l'opérateur LIKE pour rechercher un emplacement de camion parmi d'autres paramètres

   @location nchar(20),
   @time time,
   @date date
AS
   select 
       DonationsTruck.VechileId, Phone, Location, [Date], [Time]
   from 
       Vechile, DonationsTruck
    where 
       Vechile.VechileId = DonationsTruck.VechileId
       and (((Location like '%'+@location+'%') or (Location like '%'+@location) or (Location like @location+'%') ) or [Date]=@date or [Time] = @time)

J'annule les autres paramètres et recherche par emplacement uniquement mais cela ne renvoie toujours aucun résultat même lorsque j'utilise le nom complet de l'emplacement

15
Scarnet

Votre type de données pour @location nchar(20) doit être @location nvarchar(20), car nChar a une longueur fixe (remplie d'espaces).
Si Location est également nchar, vous devrez le convertir:

 ... Cast(Location as nVarchar(200)) like '%'+@location+'%' ...   

Pour activer les paramètres Nullable avec et la condition AND, utilisez simplement IsNull ou Coalesce pour la comparaison, ce qui n'est pas nécessaire dans votre exemple en utilisant OR.

par exemple. si vous souhaitez comparer le lieu ET la date et l'heure.

@location nchar(20),
@time time,
@date date
as
select DonationsTruck.VechileId, Phone, Location, [Date], [Time]
from Vechile, DonationsTruck
where Vechile.VechileId = DonationsTruck.VechileId
and (((Location like '%'+IsNull(@location,Location)+'%')) and [Date]=IsNUll(@date,date) and [Time] = IsNull(@time,Time))
32
bummi

Je travaillais dessus. Vérifiez la déclaration ci-dessous. A travaillé pour moi !!


SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%'
2
Singh T