Хранимая процедура MSSQL: сравните параметр со столбцом, если ISNUMERIC - PullRequest
0 голосов
/ 18 августа 2011

У меня есть следующая таблица «Менеджеры» (упрощенно):

ID, int
Name, nvarchar(100)

В хранимой процедуре, которая имеет один аргумент («Поиск», введите nvarchar), я хочу выбрать каждую строку, где

  1. ID-столбец точно @Search ИЛИ
  2. Колонка имени содержит @ Search.

На данный момент мой выбор в хранимой процедуре выглядит примерно так:

SELECT ID, Name FROM Managers WHERE
(ISNUMERIC(@Search) = 1 AND [ID] = CAST(@Search AS INT)) Or
Contains([Name], @Search)

Если я вызову хранимую процедуру с @Search = 1321 (пример), выбор будет работать.

Но если у меня есть параметр @Search - не числовой (например, HES), я получаю следующую ошибку: Ошибка преобразования при преобразовании значения nvarchar 'HES' в тип данных int.

Как я могу это исправить?

Заранее спасибо

Raphi

1 Ответ

0 голосов
/ 18 августа 2011
SELECT ID, Name FROM Managers
WHERE [ID] = CASE
               WHEN ISNUMERIC(@Search) = 1 AND @Search NOT LIKE '%.%' THEN CAST(@Search AS INT)
               ELSE -1
             END
OR Contains([Name], @Search)
...