이전 버전 SQL Server에 대한 향상된 날짜 및 시간 형식 동작(ODBC)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

이 항목에서는 향상된 날짜 및 시간 기능을 사용하는 클라이언트 애플리케이션이 SQL Server 2008(10.0.x) 이전 버전의 SQL Server와 통신하는 경우 및 Microsoft Data Access Components를 사용하는 클라이언트 애플리케이션의 경우 예상되는 동작에 대해 설명합니다. Windows 데이터 액세스 구성 요소 또는 SQL Server 2008(10.0.x) 이전 버전의 SQL Server Native Client는 향상된 날짜 및 시간 기능을 지원하는 서버에 명령을 보냅니다.

하위 수준 클라이언트 동작

SQL Server 2008(10.0.x) 이전 버전의 SQL Server Native Client를 사용하여 컴파일된 클라이언트 애플리케이션은 새 날짜/시간 형식을 nvarchar 열로 표시합니다. 열 내용은 ODBC 날짜 및 시간 개선을 위한 데이터 형식 지원의 "데이터 형식: 문자열 및 리터럴" 섹션에 설명된 대로 리터럴 표현입니다. 열 크기는 열에 지정된 초 소수 부분 자릿수에 대한 최대 리터럴 길이입니다.

카탈로그 API는 클라이언트에 반환된 하위 수준 데이터 형식 코드(예: nvarchar)와 일관된 메타데이터 및 관련된 하위 수준 표현(예: 적절한 리터럴 형식)을 반환합니다. 그러나 반환되는 데이터 형식 이름은 실제 SQL Server 2008(10.0.x) 형식 이름이 됩니다.

SQLDescribeCol, SQLDescribeParam, SQGetDescField 및 SQLColAttribute에서 반환하는 문 메타데이터는 형식 이름을 포함하여 모든 면에서 하위 수준 형식과 일치하는 메타데이터를 반환합니다. 이러한 하위 수준 형식의 예는 nvarchar입니다.

날짜/시간 형식에 대한 스키마 변경이 수행된 SQL Server 2008(10.0.x) 이상 서버에 대해 하위 수준 클라이언트 애플리케이션이 실행되는 경우 예상 동작은 다음과 같습니다.

SQL Server 2005 형식 SQL Server 2008(10.0.x) 이상 형식 ODBC 클라이언트 유형 결과 변환(SQL에서 C로) 매개 변수 변환(C에서 SQL로)
날짜/시간 날짜 SQL_C_TYPE_DATE 확인 정상(1)
SQL_C_TYPE_TIMESTAMP 시간 필드가 0으로 설정됩니다. 정상(2)

시간 필드가 0이 아닌 경우 실패합니다. SQL Server 2005(9.x)에서 작동합니다.
Time(0) SQL_C_TYPE_TIME 확인 정상(1)
SQL_C_TYPE_TIMESTAMP 날짜 필드가 현재 날짜로 설정됩니다. 정상(2)

날짜가 무시되었습니다. 초 소수 부분이 0 이외의 값이면 실패합니다. SQL Server 2005(9.x)에서 작동합니다.
Time(7) SQL_C_TIME 실패 - 잘못된 시간 리터럴입니다. 정상(1)
SQL_C_TYPE_TIMESTAMP 실패 - 잘못된 시간 리터럴입니다. 정상(1)
Datetime2(3) SQL_C_TYPE_TIMESTAMP 확인 정상(1)
Datetime2(7) SQL_C_TYPE_TIMESTAMP 확인 값은 클라이언트 변환에 의해 1/300초로 반올림됩니다.
Smalldatetime 날짜 SQL_C_TYPE_DATE 확인 확인
SQL_C_TYPE_TIMESTAMP 시간 필드가 0으로 설정됩니다. 정상(2)

시간 필드가 0이 아닌 경우 실패합니다. SQL Server 2005(9.x)에서 작동합니다.
Time(0) SQL_C_TYPE_TIME 확인 확인
SQL_C_TYPE_TIMESTAMP 날짜 필드가 현재 날짜로 설정됩니다. 정상(2)

날짜가 무시되었습니다. 소수 자릿수 초가 0이 아닌 경우 실패합니다.

SQL Server 2005(9.x)에서 작동합니다.
Datetime2(0) SQL_C_TYPE_TIMESTAMP 확인 확인

기호 설명

기호 의미
6 SQL Server 2005(9.x)에서 작동하는 경우 최신 버전의 SQL Server에서 계속 작동해야 합니다.
2 SQL Server 2005(9.x)에서 작업한 애플리케이션은 최신 버전의 SQL Server로 인해 실패할 수 있습니다.

일반적인 스키마 변경 내용만 고려되었습니다. 다음은 일반적인 변경 내용입니다.

  • 논리적으로 애플리케이션에 날짜 또는 시간 값만 필요한 새 형식을 사용합니다. 그러나 이전에는 개별 날짜 및 시간 형식이 없었으므로 애플리케이션에서 datetime 또는 smaledatetime을 사용해야 했습니다.

  • 새 형식을 사용하여 추가 소수 자릿수 초 정밀도 또는 정확도를 얻습니다.

  • 기본 설정 날짜 및 시간 데이터 형식이므로 datetime2로 전환합니다.

SQLColumns, SQLProcedureColumns 및 SQLSpecialColumns에서 반환된 열 메타데이터

날짜/시간 형식에 대해 다음 열 값이 반환됩니다.

열 유형 date time smalldatetime Datetime datetime2 datetimeoffset
DATA_TYPE SQL_WVARCHAR SQL_WVARCHAR SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_WVARCHAR SQL_WVARCHAR
TYPE_NAME date time smalldatetime Datetime datetime2 datetimeoffset
COLUMN_SIZE 10 8,10..16 16 23 19, 21..27 26, 28..34
BUFFER_LENGTH 20 16, 20..32 16 16 38, 42..54 52, 56..68
DECIMAL_DIGITS NULL NULL 0 3 NULL NULL
SQL_DATA_TYPE SQL_WVARCHAR SQL_WVARCHAR SQL_DATETIME SQL_DATETIME SQL_WVARCHAR SQL_WVARCHAR
SQL_DATETIME_SUB NULL NULL SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP NULL NULL
CHAR_OCTET_LENGTH NULL NULL NULL NULL NULL NULL
SS_DATA_TYPE 0 0 111 111 0 0

SQLSpecialColumns는 SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH 또는 SS_DATA_TYPE 반환하지 않습니다.

SQLGetTypeInfo가 반환하는 데이터 형식 메타데이터

날짜/시간 형식에 대해 다음 열 값이 반환됩니다.

열 유형 date time smalldatetime Datetime datetime2 datetimeoffset
TYPE_NAME date time smalldatetime Datetime datetime2 datetimeoffset
DATA_TYPE SQL_WVARCHAR SQL_WVARCHAR SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_WVARCHAR SQL_WVARCHAR
COLUMN_SIZE 10 16 16 23 27 34
LITERAL_PREFIX ' ' ' ' ' '
LITERAL_SUFFIX ' ' ' ' ' '
CREATE_PARAMS NULL NULL NULL NULL NULL NULL
NULLABLE SQL_NULLABLE SQL_NULLABLE SQL_NULLABLE SQL_NULLABLE SQL_NULLABLE SQL_NULLABLE
CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE
UNSIGNED_ATTRIBUTE NULL NULL NULL NULL NULL NULL
FXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
AUTO_UNIQUE_VALUE NULL NULL NULL NULL NULL NULL
LOCAL_TYPE_NAME date time smalldatetime Datetime datetime2 datetimeoffset
MINIMUM_SCALE NULL NULL 0 3 NULL NULL
MAXIMUM_SCALE NULL NULL 0 3 NULL NULL
SQL_DATA_TYPE SQL_WVARCHAR SQL_WVARCHAR SQL_DATETIME SQL_DATETIME SQL_WVARCHAR SQL_WVARCHAR
SQL_DATETIME_SUB NULL NULL SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP NULL NULL
NUM_PREC_RADIX NULL NULL NULL NULL NULL NULL
INTERVAL_PRECISION NULL NULL NULL NULL NULL NULL
USERTYPE 0 0 12 22 0 0

하위 수준 서버 동작

SQL Server 2008(10.0.x)인 이전 버전의 서버 인스턴스에 연결된 경우 새 서버 형식 또는 관련 메타데이터 코드 및 설명자 필드를 사용하려고 하면 SQL_ERROR 반환됩니다. 진단 레코드는 SQLSTATE HY004 및 "연결 중인 서버 버전에 대한 잘못된 SQL 데이터 형식" 또는 07006 및 "제한된 데이터 형식 특성 위반"을 사용하여 생성됩니다.

참고 항목

날짜 및 시간 기능 향상(ODBC)