매개 변수 및 결과 메타데이터
이 항목에서는 날짜 및 시간 데이터 형식에 대해 IPD(구현 매개 변수 설명자) 및 IRD(구현 행 설명자) 필드에서 반환되는 내용에 대해 설명합니다.
IPD 필드에서 반환되는 정보
다음은 IPD 필드에서 반환되는 정보입니다.
매개 변수 유형 |
date |
time |
smalldatetime |
datetime |
datetime2 |
datetimeoffset |
---|---|---|---|---|---|---|
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_TYPE_DATE |
SQL_SS_TIME2 |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_SS_TIMESTAMPOFFSET |
SQL_DESC_DATETIME_INTERVAL_CODE |
SQL_CODE_DATE |
0 |
SQL_CODE_TIMESTAMP |
SQL_CODE_TIMESTAMP |
SQL_CODE_TIMESTAMP |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
10 |
8,10..16 |
16 |
23 |
19, 21..27 |
26, 28..34 |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
10 |
8,10..16 |
16 |
23 |
19, 21..27 |
26, 28..34 |
SQL_DESC_OCTET_LENGTH |
6 |
12 |
4 |
8 |
16 |
20 |
SQL_DESC_PRECISION |
0 |
0..7 |
0 |
3 |
0..7 |
0..7 |
SQL_DESC_SCALE |
0 |
0..7 |
0 |
3 |
0..7 |
0..7 |
SQL_DESC_TYPE |
SQL_TYPE_DATE |
SQL_SS_TYPE_TIME2 |
SQL_DATETIME |
SQL_DATETIME |
SQL_DATETIME |
SQL_SS_TIMESTAMPOFFSET |
SQL_DESC_TYPE_NAME |
date |
time |
IRD의 smalldatetime, IPD의 datetime2 |
IRD의 datetime, IPD의 datetime2 |
datetime2 |
datetimeoffset |
SQL_CA_SS_VARIANT_TYPE |
SQL_C_TYPE_DATE |
SQL_C_TYPE_BINARY |
SQL_C_TYPE_TIMESTAMP |
SQL_C_TYPE_TIMESTAMP |
SQL_C_TYPE_TIMESTAMP |
SQL_C_TYPE_BINARY |
SQL_CA_SS_VARIANT_SQL_TYPE |
SQL_TYPE_DATE |
SQL_SS_TIME2 |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_SS_TIMESTAMPOFFSET |
SQL_CA_SS_SERVER_TYPE |
해당 사항 없음 |
해당 사항 없음 |
SQL_SS_TYPE_SMALLDATETIME |
SQL_SS_TYPE_DATETIME |
SQL_SS_TYPE_DEFAULT |
해당 사항 없음 |
값 범위가 연속되지 않을 수도 있습니다. 예를 들어 8,10..16에서는 9가 누락되어 있습니다. 이러한 경우는 소수 부분 자릿수가 0보다 커서 소수점을 추가했을 때 발생합니다.
datetime2는 드라이버에서 모든 SQL_TYPE_TIMESTAMP 값을 서버에 전달하기 위한 일반 형식으로 사용되므로 smalldatetime 및 datetime의 typename으로 반환됩니다.
SQL_CA_SS_VARIANT_SQL_TYPE은 새 설명자 필드입니다. 이 필드는 응용 프로그램에서 sqlvariant(SQL_SSVARIANT) 열 및 매개 변수와 연관된 값 형식을 지정하는 데 사용하기 위해 IRD 및 IPD에 추가되었습니다.
SQL_CA_SS_SERVER_TYPE은 새로운 IPD 전용 필드로, 응용 프로그램에서 SQL_TYPE_TYPETIMESTAMP나 C 형식의 SQL_C_TYPE_TIMESTAMP를 갖는 SQL_SS_VARIANT로 바인딩된 매개 변수 값을 서버로 전송하는 방법을 제어하는 데 사용할 수 있습니다. SQL_DESC_CONCISE_TYPE이 SQL_TYPE_TIMESTAMP(또는 SQL_SS_VARIANT 및 C 형식의 SQL_C_TYPE_TIMESTAMP)일 때 SQLExecute 또는 SQLExecDirect를 호출하는 경우 다음과 같이 SQL_CA_SS_SERVER_TYPE 값에 따라 매개 변수 값의 TDS(Tabular Data Stream) 유형이 결정됩니다.
SQL_CA_SS_SERVER_TYPE 값 |
SQL_DESC_PRECISION에 대한 유효한 값 |
SQL_DESC_LENGTH에 대한 유효한 값 |
TDS 유형 |
---|---|---|---|
SQL_SS_TYPE_DEFAULT |
0..7 |
19, 21..27 |
datetime2 |
SQL_SS_TYPE_SMALLDATETIME |
0 |
19 |
smalldatetime |
SQL_SS_TYPE_DATETIME |
3 |
23 |
datetime |
SQL_CA_SS_SERVER_TYPE의 기본 설정은 SQL_SS_TYPE_DEFAULT입니다. SQL_DESC_PRECISION 및 SQL_DESC_LENGTH 설정의 유효성은 위 표에 설명된 대로 SQL_CA_SS_SERVER_TYPE 설정으로 검사됩니다. 이 유효성 검사에 실패하면 SQL_ERROR가 반환되고 SQLState 07006 및 "제한된 데이터 형식 특성을 위반했습니다"라는 메시지가 포함된 진단 레코드가 기록됩니다. SQL_CA_SS_SERVER_TYPE이 SQL_SS_TYPE DEFAULT 이외의 값으로 설정되고 DESC_CONCISE_TYPE이 SQL_TYPE_TIMESTAMP가 아닌 경우에도 이 오류가 반환됩니다. 다음과 같이 설명자 일관성 검사가 발생할 때 이러한 유효성 검사가 수행됩니다.
SQL_DESC_DATA_PTR이 변경된 경우
준비 또는 실행 시간에 SQLExecute, SQLExecDirect, SQLSetPos 또는 SQLBulkOperations를 호출하는 경우
응용 프로그램에서 준비 지연을 비활성화하고 SQLPrepare를 호출하거나 준비되었지만 실행되지 않은 문에 대해 SQLNumResultCols, SQLDescribeCol 또는 SQLDescribeParam을 호출하여 지연되지 않은 준비를 적용하는 경우
SQLSetDescField를 호출하여 SQL_CA_SS_SERVER_TYPE을 설정할 때 해당 값은 SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME 또는 SQL_SS_TYPE_DATETIME이어야 합니다. 그렇지 않으면 SQL_ERROR가 반환되고 SQLState HY092 및 "잘못된 특성/옵션 식별자입니다"라는 메시지가 포함된 진단 레코드가 기록됩니다.
SQL_CA_SS_SERVER_TYPE 특성은 datetime 및 smalldatetime에서 지원되지만 datetime2에서는 지원되지 않는 기능에 종속된 응용 프로그램에서 사용할 수 있습니다. 예를 들어 datetime2에는 dateadd 및 datediif 함수를 사용해야 하는 반면 datetime 및 smalldatetime에는 산술 연산자도 사용할 수 있습니다. 이 속성은 대부분의 응용 프로그램에서 사용할 필요가 없으며 사용해서는 안 됩니다.
IRD 필드에서 반환되는 정보
다음은 IRD 필드에서 반환되는 정보입니다.
열 유형 |
date |
time |
smalldatetime |
datetime |
datetime2 |
datetimeoffset |
---|---|---|---|---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_TYPE_DATE |
SQL_SS_TIME2 |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_TYPE_TIMESTAMP |
SQL_SS_TIMESTAMPOFFSET |
SQL_DESC_DATETIME_INTERVAL_CODE |
SQL_CODE_DATE |
0 |
SQL_CODE_TIMESTAMP |
SQL_CODE_TIMESTAMP |
SQL_CODE_TIMESTAMP |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
10 |
8,10..16 |
16 |
23 |
19, 21..27 |
26, 28..34 |
SQL_DESC_DISPLAY_SIZE |
10 |
8,10..16 |
16 |
23 |
19, 21..27 |
26, 28..34 |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
10 |
8,10..16 |
16 |
2 |
19, 21..27 |
26, 28..34 |
SQL_DESC_LITERAL_PREFIX |
‘ |
‘ |
‘ |
‘ |
‘ |
‘ |
SQL_DESC_LITERAL_SUFFIX |
‘ |
‘ |
‘ |
‘ |
‘ |
‘ |
SQL_DESC_LOCAL_TYPE_NAME |
date |
time |
smalldatetime |
datetime |
datetime2 |
datetimeoffset |
SQL_DESC_OCTET_LENGTH |
6 |
12 |
4 |
8 |
16 |
20 |
SQL_DESC_PRECISION |
0 |
0..7 |
0 |
3 |
0..7 |
0..7 |
SQL_DESC_SCALE |
0 |
0..7 |
0 |
3 |
0..7 |
0..7 |
SQL_DESC_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_PRED_SEARCHABLE |
SQL_DESC_TYPE |
SQL_DATETIME |
SQL_SS_TIME2 |
SQL_DATETIME |
SQL_DATETIME |
SQL_DATETIME |
SQL_SS_TIMESTAMPOFFSET |
SQL_DESC_TYPE_NAME |
date |
time |
smalldatetime |
datetime |
datetime2 |
datetimeoffset |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_TRUE |
SQL_TRUE |
SQL_TRUE |
SQL_TRUE |