ISO-8601 för DATETIME (den äldre typen) är på något sätt "trasig" eller "anpassad" (beroende på om du ser den som en bugg eller funktion) - du måste använda YYYYMMDD (utan några streck) för att få det att fungera oavsett språkinställningarna.
För DATE eller DATETIME2(n) datatyper, detta har åtgärdats och det "korrekta" ISO-8601-formatet YYYY-MM-DD kommer alltid att tolkas korrekt.
-- 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');
Det är en egenhet av DATETIME skriv (och inte den enda...) - registrera det, vet om det - och gå vidare (vilket betyder:använd inte DATETIME längre - använd DATE eller DATETIME2(n) istället - mycket trevligare att jobba med!) :-)