MSSQL Stored Procedure: Compare Parameter with Column if ISNUMERIC
-
20-12-2020 - |
Question
I have following table "Managers" (simplified):
ID, int
Name, nvarchar(100)
In a stored procedure that has one argument ("Search", type nvarchar), I want to select every row where
- The ID-Column is exactly @Search OR
- The Name-Column contains @Search.
At the moment, my select in the stored procedure looks something like this:
SELECT ID, Name FROM Managers WHERE
(ISNUMERIC(@Search) = 1 AND [ID] = CAST(@Search AS INT)) Or
Contains([Name], @Search)
If I call the stored procedure with @Search = 1321 (example), the select works.
But if I have a @Search - parameter that is not numeric (example "HES"), I get the following error: Conversion failed when converting the nvarchar value 'HES' to data type int.
How can I fix this?
Thanks in advance
Raphi
Solution
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)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow