이전 버전 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 및 "제한된 데이터 형식 특성 위반"을 사용하여 생성됩니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기