Una opción más independiente del idioma para los literales de cadena es el formato estándar internacional ISO 8601 "AAAA-MM-DDThh: mm: ss". Utilicé la consulta SQL a continuación para probar el formato, y de hecho funciona en todos los lenguajes SQL en sys.syslanguages :
declare @sql nvarchar(4000)
declare @LangID smallint
declare @Alias sysname
declare @MaxLangID smallint
select @MaxLangID = max(langid) from sys.syslanguages
set @LangID = 0
while @LangID <= @MaxLangID
begin
select @Alias = alias
from sys.syslanguages
where langid = @LangID
if @Alias is not null
begin
begin try
set @sql = N'declare @TestLang table (langdate datetime)
set language ''' + @alias + N''';
insert into @TestLang (langdate)
values (''2012-06-18T10:34:09'')'
print 'Testing ' + @Alias
exec sp_executesql @sql
end try
begin catch
print 'Error in language ' + @Alias
print ERROR_MESSAGE()
end catch
end
select @LangID = min(langid)
from sys.syslanguages
where langid > @LangID
end
De acuerdo con la sección Formatos de fecha y hora literales de cadena en Microsoft TechNet, el formato de fecha estándar de ANSI SQL estándar "AAAA-MM-DD hh: mm: ss" se supone que es "multilingüe". Sin embargo, con la misma consulta, el formato ANSI no funciona en todos los lenguajes SQL.
Por ejemplo, en danés, tendrá muchos errores como los siguientes:
Error en el idioma danés La conversión de un tipo de datos varchar a un tipo de datos datetime dio como resultado un valor fuera de rango.
Si desea crear una consulta en C # para ejecutar en SQL Server, y necesita pasar una fecha en el formato ISO 8601, use el especificador de formato "s" ordenable :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);