다음을 통해 공유


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

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

하위 수준 클라이언트 동작

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

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

SQLDescribeCol, SQLDescribeParam, SQGetDescFieldSQLColAttribute가 반환하는 문 메타데이터는 형식 이름을 포함하여 하위 수준 형식과 모든 측면에서 일관된 메타데이터를 반환합니다. 이러한 하위 수준 형식의 한 가지 예로 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에서 작동합니다.

Time(0)

SQL_C_TYPE_TIME

정상

정상(1)

SQL_C_TYPE_TIMESTAMP

날짜 필드가 현재 날짜로 설정됩니다.

정상(2)

날짜가 무시됩니다. 초 소수 부분이 0 이외의 값이면 실패합니다. SQL Server 2005에서 작동합니다.

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에서 작동합니다.

Time(0)

SQL_C_TYPE_TIME

정상

정상

SQL_C_TYPE_TIMESTAMP

날짜 필드가 현재 날짜로 설정됩니다.

정상(2)

날짜가 무시됩니다. 초 소수 부분이 0 이외의 값이면 실패합니다.

SQL Server 2005에서 작동합니다.

Datetime2(0)

SQL_C_TYPE_TIMESTAMP

정상

정상

10@기호 설명

기호

의미

1

SQL Server 2005에서 작동한 경우 SQL Server 2008에서도 작동합니다.

2

SQL Server 2005에서 작동한 응용 프로그램이 SQL Server 2008에서는 작동하지 않을 수 있습니다.

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

  • 논리적으로 응용 프로그램에 날짜 또는 시간 값만 필요한 경우 새 형식을 사용합니다. 그러나 이전에는 개별 날짜 및 시간 형식이 없었으므로 응용 프로그램에서 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

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

10@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 및 "제한된 데이터 형식 특성을 위반했습니다."라는 메시지가 포함된 진단 레코드가 생성됩니다.

참고 항목

개념