Я пропустил пробел перед "как"
Вы также неверно указали одинарные кавычки вокруг ваших символов "%", что может привести к путанице.
Кстати, вы сами сделали небольшую SQL-инъекцию дыру в безопасности внутри самого SQL! Если один из параметров содержит апостроф, ваш sqlStatement сломается и будет выполнен любой мошеннический SQL в имени параметра.
Вы можете использовать функцию REPLACE, чтобы удвоить одинарные кавычки, чтобы предотвратить эту атаку:
' AND '+QUOTENAME(@SearchCat)+' LIKE ''%'+REPLACE(@Keywords, '''', '''''')+'%''...'
(QUOTENAME необходимо, если имя столбца содержит символы вне диапазона или является зарезервированным словом.)
Более чистый (но довольно многословный) подход к генерации SQL, чем утомительное ЗАМЕНА каждого строкового литерала самостоятельно, заключается в использовании sp_executesql . Например:
SELECT @strStatement= N'
SELECT @Number= CaseNumber FROM app_Case
WHERE State=@State AND District=@District
AND '+QUOTENAME(@SearchCat)+N' LIKE ''%''+@Keywords+''%''
';
SELECT @params= N'@State varchar(50), @District varchar(50), @Keywords varchar(50), @Number int OUTPUT';
EXECUTE sp_executesql @strStatement, @params, @State, @District, @Keywords, @Number OUTPUT;
Между прочим, если @searchCat может иметь только небольшое количество различных значений, вы можете использовать обходной путь, чтобы вообще не выполнять эту трудоемкую бессмысленную работу с динамическим SQL:
SELECT CaseNumber FROM app_Case
WHERE State=@State AND District=@District
AND CASE @searchCat
WHEN 'searchableColumnA' THEN searchableColumnA
WHEN 'searchableColumnB' THEN searchableColumnB
END LIKE '%'+@Keywords+'%';
См. это довольно хорошее исследование динамически созданных операторов SQL в T-SQL для получения дополнительной информации и некоторых рисков, с которыми вы сталкиваетесь.