Насколько я могу судить, вы не совсем правильно строите строку.Если @Item_Num не передается, у вас не останется ключевого слова WHERE ... у вас просто будет "FROM [tblItem_Log] AND ..."
Я бы добавил все критериибыть "И ..." и в качестве вашего начального выражения использовать:
FROM [tbl_Item_Log] WHERE (1=1)
Поскольку у вас есть код для возврата сгенерированной строки, почему бы не поместить его в SSMS и попытаться запустить его?
Я также только что заметил, что если вы не передадите значения даты, вы в конечном итоге будете выполнять NULL-строку, потому что ваша окончательная конкатенация приведет к NULL.Это те вещи, на которые вам нужно обратить пристальное внимание, если вы собираетесь использовать динамический SQL для построения запросов.
После того, как я исправил, я смог запустить хранимую процедуру без каких-либо ошибок.(по крайней мере, для генерации того, что выглядит как действительный оператор SQL).Это наводит меня на мысль, что это может быть проблема с типами данных в базовой таблице.Можете ли вы дать определение для этого?
Последнее замечание: лично я бы использовал
CONVERT(VARCHAR(11), RecDate, 106) AS RecDate
вместо ненужного, казалось бы, подзапроса.
Еще одно редактирование: Вы можете удалить код, проверяющий LTRIM (@Search_User_ID) <> ''.Это бессмысленный фрагмент кода, и, возможно, настройка, специфичная для вашего сервера / соединения, приводит к сбою из-за несоответствия типов.