Это всего лишь предположение, поскольку показанная функция преобразования должна работать с правильными параметрами.
Вы проходите год как двузначное число? Если это так, попробуйте передать его как полный четырехзначный год (которого ожидает формат «101») ИЛИ измените его на
SET @date = Convert(DateTime, @month + '/' + @day + '/' + @year, 1)
если вы проходите год с двумя цифрами.
(см. Разницу с веком и без века здесь: http://msdn.microsoft.com/en-us/library/ms187928.aspx)
EDIT
У меня есть второе предположение ... Возможно, ошибка не в той строке, где вы явно конвертируете параметры в переменную Datetime. Это сожгло меня раньше ... Ошибка МОЖЕТ происходить в следующей строке:
Where (EDate = @date) OR EDateEnd = (@date) OR @date Between EDate AND EDateEnd
, если столбец EDate или EDateEnd не обязательно является столбцом DateTime. Может случиться так, что ТАК содержат значения, которые не могут быть преобразованы в DateTime. (Это могут быть поля типа char с сохраненной в них строкой DateTime или фактические поля Date с сохраненными в них нулевыми значениями.)
Однако без дополнительной информации о реальной схеме базы данных трудно сказать. Лучшее, что мы можем сделать, это угадать.