ISO-8601 pro DATETIME (starší typ) je nějak "rozbitý" nebo "přizpůsobený" (podle toho, zda se na to díváte jako na chybu nebo funkci) - musíte použít YYYYMMDD (bez jakékoli pomlčky), aby fungoval bez ohledu na nastavení jazyka.
Pro DATE nebo DATETIME2(n) datové typy, toto bylo opraveno a "správný" formát ISO-8601 YYYY-MM-DD bude vždy správně interpretováno.
-- 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');
Je to zvláštnost DATETIME zadejte (a ne jediný....) - stačí jej zaregistrovat, vědět o něm - a jít dál (to znamená:nepoužívejte DATETIME dále - použijte DATE nebo DATETIME2(n) místo toho - mnohem hezčí pracovat!) :-)