문자열 리터럴에 대한 언어 독립적 선택은 국제 표준 ISO 8601 형식 "YYYY-MM-DDThh : mm : ss"입니다. 아래 SQL 쿼리를 사용하여 형식을 테스트했으며 실제로 sys.syslanguages의 모든 SQL 언어에서 작동합니다 .
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
Microsoft TechNet 의 문자열 리터럴 날짜 및 시간 형식 섹션에 따르면 표준 ANSI 표준 SQL 날짜 형식 "YYYY-MM-DD hh : mm : ss"는 "다국어"로되어 있습니다. 그러나 동일한 쿼리를 사용하면 ANSI 형식이 모든 SQL 언어에서 작동하지 않습니다.
예를 들어 덴마크어에서는 다음과 같은 많은 오류가 발생합니다.
언어 덴마크어 오류 varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어난 값이 발생했습니다.
SQL Server에서 실행하기 위해 C #으로 쿼리를 작성하고 ISO 8601 형식으로 날짜를 전달해야하는 경우 정렬 가능한 "s"형식 지정자를 사용하십시오 .
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);