Нет хорошего способа сделать это в SQL. Некоторые подходы, которые я видел:
1) Использовать CASE в сочетании с логическими операторами:
WHERE
OrderNumber = CASE
WHEN (IsNumeric(@OrderNumber) = 1)
THEN CONVERT(INT, @OrderNumber)
ELSE -9999 -- Some numeric value that just cannot exist in the column
END
OR
FirstName LIKE CASE
WHEN (IsNumeric(@OrderNumber) = 0)
THEN '%' + @OrderNumber
ELSE ''
END
2) Используйте IF вне SELECT
IF (IsNumeric(@OrderNumber)) = 1
BEGIN
SELECT * FROM Table
WHERE @OrderNumber = OrderNumber
END ELSE BEGIN
SELECT * FROM Table
WHERE OrderNumber LIKE '%' + @OrderNumber
END
3) Используя длинную строку, составьте свой оператор SQL условно, а затем используйте EXEC
Третий подход отвратителен, но это почти единственная мысль, которая работает, если у вас есть несколько таких переменных условий.