ISO-8601 dla DATETIME (starszy typ) jest w jakiś sposób „zepsuty” lub „dostosowany” (w zależności od tego, czy patrzysz na to jako na błąd, czy jako funkcję) - musisz użyć YYYYMMDD (bez wszelkie myślniki), aby działał niezależnie od ustawień języka.
Dla DATE lub DATETIME2(n) typy danych, zostało to naprawione i „właściwy” format ISO-8601 YYYY-MM-DD zawsze będą poprawnie interpretowane.
-- OK because of "adapted" ISO-8601
SET LANGUAGE GERMAN;
DECLARE @dt DATETIME='20170113';
SELECT @dt;
SELECT CAST('20170113' AS DATETIME);
SELECT CONVERT(DATETIME, '20170113');
-- OK because of DATETIME2(n)
SET LANGUAGE GERMAN;
DECLARE @dt2 DATETIME2(0) = '2017-01-13';
SELECT @dt2;
SELECT CAST('2017-01-13' AS DATETIME2(0));
SELECT CONVERT(DATETIME2(0), '2017-01-13');
To dziwactwo DATETIME wpisz (a nie jedyny....) - po prostu zarejestruj go, wiedz o tym - i przejdź dalej (tzn. nie używaj DATETIME już - użyj DATE lub DATETIME2(n) zamiast tego - dużo przyjemniej się z nim pracuje!) :-)