Uma opção mais independente de idioma para literais de cadeia de caracteres é o padrão internacional ISO 8601, formato "AAAA-MM-DDThh: mm: ss". Usei a consulta SQL abaixo para testar o formato e, de fato, funciona em todas as linguagens SQL em 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 acordo com a seção Formatos literais de data e hora da seqüência de caracteres no Microsoft TechNet, o formato de data padrão ANSI SQL padrão "AAAA-MM-DD hh: mm: ss" deve ser "multilíngue". No entanto, usando a mesma consulta, o formato ANSI não funciona em todos os idiomas SQL.
Por exemplo, em dinamarquês, você encontrará muitos erros como o seguinte:
Erro no idioma dinamarquês A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.
Se você deseja criar uma consulta em C # para execução no SQL Server e precisar passar uma data no formato ISO 8601, use o especificador de formato Classificável "s" :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);