Иногда необходимо выполнять поиск по записям таблицы в БД SQL-Server.

К примеру, в данной таблице автомобилей необходимо найти все записи, у которых в названии машины присутствует последовательность символов «Mustang», и (или) номер модели содержит в себе символы 310.
Ясно, что такой не точный поиск выполняется с конструкцией like. Попробуем создать хранимую процедуру:
ALTER PROCEDURE dbo.SearchCars
(
@carName nvarchar(50),
@carModeNumber nvarchar(8)
)
AS
SELECT * FROM CarTable WHERE
CarName like '%'+@carName+'%' AND
CarModeNumber like '%'+@carModeNumber+'%'
RETURN
Но, сервер не воспримет данную процедуру поскольку возникнет конфликт при попытке конвертировать значение параметра +@carModeNumber в bigint.
Ладно, если мы точно хотим указывать весь номер. Тогда проблем нет, мы просто строку CarModeNumber like '%'+@carModeNumber+'%' переписываем на CarModeNumber = @carModeNumber.
Но нас интересует иммнно неточное совпадение номера модели машины.
Для этих случаев существует функция Convert, но рассматривать её не будем, поскольку она не является стандартизированной. Остановимся на функции cast. Данная функция легко конвертирует данные в требуемый тип. Перепишем наш запрос с использованием функции cast:
ALTER PROCEDURE dbo.SearchCars
(
@carName nvarchar(50),
@carModeNumber nvarchar(8)
)
AS
SELECT * FROM CarTable WHERE
CarName like '%'+@carName+'%' AND
cast (CarModeNumber as nvarchar(8))
like '%'+@carModeNumber+'%'
RETURN
Вот теперь все чудненько заработает. То есть записью cast (CarModeNumber as nvarchar(8)) like '%'+@carModeNumber+'%' мы сначала приводим значение из поля CarModeNumber к типу nvarchar, а потом уже полученный стринговый литерал сравниваем с выражением '%'+@carModeNumber+'%'.
Оценить статью:
Оценивая статью, Вы подсказываете нам насколько данная информация стала
полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала
для понимания и простоты его изложения. Дополнительные комментари, вопросы,
дополнения и замечания Вы можете указать на странице
От Вас
Частичное, или полное копирование материала данной
статьи возможно лишь при размещении ссылки на данную страницу.