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

적용 대상: 예SQL Server(지원되는 모든 버전) 예Azure SQL Database 예Azure SQL Managed Instance 예Azure Synapse Analytics 예병렬 데이터 웨어하우스

이 항목에서는 향상된 날짜 및 시간 기능을 사용하는 클라이언트 애플리케이션이 SQL Server보다 이전 버전의 SQL Server 2008와 통신할 경우 및 Microsoft Data Access Components, Windows Data Access Components 또는 SQL Server보다 이전 버전의 SQL Server 2008 Native Client를 사용하는 클라이언트 애플리케이션이 향상된 날짜 및 시간 기능을 지원하는 서버에 명령을 보낼 경우 예상되는 동작에 대해 설명합니다.

하위 수준 클라이언트 동작

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

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

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

SQL Server 2008날짜/시간 형식에 대 한 스키마가 변경 된 (또는 이후) 서버에 대해 하위 수준 클라이언트 응용 프로그램이 실행 되는 경우 예상 되는 동작은 다음과 같습니다.

SQL Server 2005 형식 SQL Server 2008(또는 이후 버전) 형식 ODBC 클라이언트 형식 결과 변환(SQL에서 C로 변환) 매개 변수 변환(C에서 SQL로 변환)
DateTime Date 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 Date 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 확인 확인

기호 설명

기호 의미
1 SQL Server 2005(9.x)에서 동작하는 경우 그보다 최신 버전의 SQL Server에서도 계속 동작합니다.
2 SQL Server 2005(9.x)에서 작동한 애플리케이션이 그보다 최신 버전의 SQL Server에서는 작동하지 않을 수 있습니다.

여기서는 다음과 같이 일반적인 스키마 변경 사항만 고려되었습니다.

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

  • 초 소수 부분 자릿수를 늘리거나 정확도를 높이기 위해 새 형식을 사용합니다.

  • datetime2가 선호하는 날짜 및 시간 데이터 형식이기 때문에 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
검색 가능 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보다 이전 버전의 서버 인스턴스에 연결되어 있는 경우 새로운 서버 형식 또는 관련된 메타데이터 코드 및 설명자 필드를 사용하려고 하면 SQL_ERROR가 반환됩니다. SQLSTATE HY004 및 "연결에서 서버 버전의 SQL 데이터 형식이 잘못되었습니다."라는 메시지가 포함된 진단 레코드 또는 07006 및 "제한된 데이터 형식 특성을 위반했습니다."라는 메시지가 포함된 진단 레코드가 생성됩니다.

참고 항목

ODBC)(날짜 및 시간 개선