Это не вырезать и вставить.Выражение CASE
должно возвращать значение, и вы возвращаете строку, содержащую SQL (технически это значение, но неправильного типа).Это то, что вы хотели написать, я думаю:
SELECT * FROM [Purchasing].[Vendor] WHERE
CASE
WHEN @url IS null OR @url = '' OR @url = 'ALL'
THEN PurchasingWebServiceURL LIKE '%'
WHEN @url = 'blank'
THEN PurchasingWebServiceURL = ''
WHEN @url = 'fail'
THEN PurchasingWebServiceURL NOT LIKE '%treyresearch%'
ELSE PurchasingWebServiceURL = '%' + @url + '%'
END
Я также подозреваю, что на некоторых диалектах это может не сработать, но сейчас не могу проверить (Oracle, я смотрю на вас)к отсутствию логических значений.
Однако, поскольку @url
не зависит от значений таблицы, почему бы не сделать три разных запроса и выбрать, какой из них оценивать на основе вашего параметра?