Использование оператора 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 '%'+@location+'%') or (Location like '%'+@location) or (Location like @location+'%') ) or [Date]=@date or [Time] = @time)
I null другие параметры и поиск только по местоположению, но он всегда не возвращает никаких результатов, даже если я использовал полное имя местоположения
3 ответов
ваш тип данных для @location nchar(20)
должно быть @location nvarchar(20)
, так как nChar имеет фиксированную длину (заполненную пробелами).
Если местоположение nchar тоже вам придется преобразовать его:
... Cast(Location as nVarchar(200)) like '%'+@location+'%' ...
для включения параметров nullable с and 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))
Я работал над тем же. Проверьте ниже инструкции. Работал на меня!!
SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%'
НАПРИМЕР: СРАВНИТЕ С НАЗВАНИЕМ ДЕРЕВНИ
ALTER PROCEDURE POSMAST
(@COLUMN_NAME VARCHAR(50))
AS
SELECT * FROM TABLE_NAME
WHERE
village_name LIKE + @VILLAGE_NAME + '%';