Использование оператора LIKE с параметрами хранимой процедуры

У меня есть хранимая процедура, которая использует оператор LIKE для поиска местоположения грузовика среди некоторых других параметров

   @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 '%'[email protected]+'%') or (Location like '%'[email protected]) or (Location like @location+'%') ) or [Date][email protected] or [Time] = @time)

Я игнорирую другие параметры и выполняю поиск по местоположению, но он всегда возвращает результаты, даже когда я использовал полное имя местоположения

Ответ 1

Ваш тип данных для @location nchar(20) должен быть @location nvarchar(20), так как nChar имеет фиксированную длину (заполненную пробелами).
Если "Location" - "nchar", вам нужно будет его преобразовать:

 ... Cast(Location as nVarchar(200)) like '%'[email protected]+'%' ...   

Чтобы включить параметры с нулевым параметром с условием AND, просто используйте IsNull или Coalesce для сравнения, который не нужен в вашем примере, используя OR.

например. если вы хотите сравнить местоположение и дату и время.

@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))

Ответ 2

Я работал над этим. Выполните проверку ниже. Работал для меня.


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

Ответ 3

ЭГ: СРАВНИТЕ НА ИМЯ ДЕРЕВЬЯ

ALTER PROCEDURE POSMAST
(@COLUMN_NAME VARCHAR(50))
AS
SELECT * FROM TABLE_NAME
WHERE 
village_name LIKE + @VILLAGE_NAME + '%';