Использование переменных / параметров соответствующей ширины должно было подчеркнуть проблему, когда вы назначаете год переменной месяца и наоборот.
Рассмотрите возможность добавления проверки, чтобы убедиться, что значения параметров являются цифрами, имеют диапазон и т. Д.
Использование формата 'ггггммдд' обеспечивает защиту от региональных проблем:
DECLARE @yearPassed CHAR(4);
SET @yearPassed = '2010';
DECLARE @monthPassed CHAR(2);
SET @monthPassed = '10';
DECLARE @TestDate DATETIME
SET @TestDate = CAST(@yearPassed + @monthPassed + '01' AS DATETIME);