CAST зависит от языка и культуры SQL Server.
На моих Немецких SQL Server 2008 R2 и 2012 (@@language = 'Deutsch'
) следующее приведение приводит к ошибке:
CAST('12/31/9999 23:59:59.997' AS DATETIME)
Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.
Принимая во внимание, что этот работает отлично:
CAST('31.12.9999 23:59:59.997' AS DATETIME)
РЕШЕНИЕ
Я думаю, что самый безопасный подход - указать формат с помощью CONVERT:
/* ISO 8601 */
CONVERT(DATETIME, '9999-12-31T23:59:59.997', 126)