다음을 통해 공유


향상된 날짜 및 시간 유형에 대한 대량 복사 변경 내용(OLE DB 및 ODBC)

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

이 항목에서는 대량 복사 기능을 지원하기 위한 날짜/시간 향상에 대해 설명합니다. 이 항목의 정보는 SQL Server Native Client의 OLE DB 및 ODBC 모두에 유효합니다.

Important

SQL Server Native Client(약칭 SNAC)는 SQL Server 2022(16.x) 및 SSMS(SQL Server Management Studio) 19에서 제거되었습니다. SQL Server Native Client(SQLNCLI 또는 SQLNCLI11) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 애플리케이션 개발에 권장되지 않습니다. 앞으로 새 SQL Server용 Microsoft OLE DB 드라이버(MSOLEDBSQL) 또는 최신 Microsoft ODBC Driver for SQL Server로 전환합니다. SQL Server 데이터베이스 엔진(버전 2012~2019)의 구성 요소로 제공되는 SQLNCLI의 경우 이 지원 수명 주기 예외를 참조하세요.

파일 서식 지정

형식 파일을 대화형으로 빌드할 때 다음 표에서는 날짜/시간 형식 및 해당 호스트 파일 데이터 형식 이름을 지정하는 데 사용되는 입력에 대해 설명합니다.

파일 스토리지 유형 호스트 파일 데이터 형식 프롬프트에 대한 응답: "Enter the file storage type of field <field_name> [<default>]:"
날짜/시간 SQLDATETIME
Smalldatetime SQLDATETIM4 D
날짜 SQLDATE de
시간 SQLTIME te
Datetime2 SQLDATETIME2 d2
Datetimeoffset SQLDATETIMEOFFSET do

XML 서식 파일 XSD에는 다음과 같은 추가 사항이 있습니다.

<xs:complexType name="SQLDATETIME2">  
    <xs:complexContent>  
        <xs:extension base="bl:Fixed"/>  
    </xs:complexContent>  
</xs:complexType>  
<xs:complexType name="SQLDATETIMEOFFSET">  
    <xs:complexContent>  
        <xs:extension base="bl:Fixed"/>  
    </xs:complexContent>  
</xs:complexType>  
<xs:complexType name="SQLDATE">  
    <xs:complexContent>  
        <xs:extension base="bl:Fixed"/>  
    </xs:complexContent>  
</xs:complexType>  
<xs:complexType name="SQLTIME">  
    <xs:complexContent>  
        <xs:extension base="bl:Fixed"/>  
    </xs:complexContent>  
</xs:complexType>  

문자 데이터 파일

문자 데이터 파일에서 날짜 및 시간 값은 ODBC에 대한 ODBC 날짜 및 시간 개선에 대한 데이터 형식 지원의 "데이터 형식: 문자열 및 리터럴" 섹션 또는 OLE DB에 대한 OLE DB 날짜 및 시간 개선에 대한 데이터 형식 지원에 설명된 대로 표시됩니다.

네이티브 데이터 fles에서 4개의 새 형식에 대한 날짜 및 시간 값은 크기가 7인 TDS 표현으로 표시됩니다(이는 SQL Server에서 지원하는 최대값이며 bcp 데이터 파일은 이러한 열의 배율을 저장하지 않기 때문). 기존 datetimesmalldatetime 형식 또는 TDS(테이블 형식 데이터 스트림) 표현의 스토리지는 변경되지 않습니다.

다른 스토리지 유형의 스토리지 크기는 OLE DB의 경우 다음과 같습니다.

파일 스토리지 유형 스토리지 크기(바이트)
Datetime 8
smalldatetime 4
날짜 3
시간 6
datetime2 9
datetimeoffset 11

크기는 ODBC의 경우 다음과 같습니다. BCP.exe는 항상 서버에서 전체 자릿수를 검색하므로 전체 자릿수를 형식 또는 데이터 파일로 저장할 필요는 없습니다.

파일 스토리지 유형 스토리지 크기(바이트) 스토리지 형식
datetime(d) 8 TDS
smalldatetime(D) 4 TDS
date(de) 3 TDS
time(te) 6 TDS
datetime2(d2) 9 TDS
datetimeoffset(do) 11 TDS

sqlncli.h의 BCP 형식

다음 형식은 ODBC에 대한 BCP API 확장에 사용할 수 있도록 sqlncli.h에 정의됩니다. 이러한 형식은 OLE DB에서 IBCPSession::BCPColFmt의 eUserDataType 매개 변수와 함께 전달됩니다.

파일 스토리지 유형 호스트 파일 데이터 형식 IBCPSession::BCPColFmt에서 사용할 sqlncli.h를 입력합니다.
날짜/시간 SQLDATETIME BCP_TYPE_SQLDATETIME 0x3d
Smalldatetime SQLDATETIM4 BCP_TYPE_SQLDATETIME4 0x3a
날짜 SQLDATE BCP_TYPE_SQLDATE 0x28
시간 SQLTIME BCP_TYPE_SQLTIME 0x29
Datetime2 SQLDATETIME2 BCP_TYPE_SQLDATETIME2 0x2a
Datetimeoffset SQLDATETIMEOFFSET BCP_TYPE_SQLDATETIMEOFFSET 0x2b

BCP 데이터 형식 변환

다음 표에서는 변환 정보를 보여 줍니다.

OLE DB 참고 다음 변환은 IBCPSession에서 수행됩니다. IRowsetFastLoad는 클라이언트에서 서버로 수행되는 변환에 정의된 OLE DB 변환을 사용합니다. datetime 값은 1/300초로 반올림되며 smalldatetime 값은 아래에 설명된 클라이언트 변환이 수행된 후 0초로 설정됩니다. 날짜/시간 반올림은 시간과 분을 통해 전파되지만 날짜는 전파되지 않습니다.

To -->

보낸 사람
date time smalldatetime Datetime datetime2 datetimeoffset char wchar
날짜 6 - 1,6 1,6 1,6 1,5,6 1,3 1,3
시간 해당 없음 1,10 1,7,10 1,7,10 1,7,10 1,5,7,10 1,3 1,3
Smalldatetime 1,2 1,4,10 6 6 1,10 1,5,10 1,11 1,11
날짜/시간 1,2 1,4,10 1,12 6 1,10 1,5,10 1,11 1,11
Datetime2 1,2 1,4,10 1,10(ODBC)1,12(OLE DB) 1,10 1,10 1,5,10 1,3 1,3
Datetimeoffset 1,2,8 1,4,8,10 1,8,10 1,8,10 1,8,10 1,10 1,3 1,3
Char/wchar(date) 9 - 9,6(ODBC)9,6,12(OLE DB) 9,6(ODBC)9,6,12(OLE DB) 9,6 9,5,6 해당 없음 해당 없음
Char/wchar(time) - 9,10 9,7,10(ODBC)9,7,10,12(OLE DB) 9,7,10(ODBC)9,7,10,12(OLE DB) 9,7,10 9,5,7,10 해당 없음 해당 없음
Char/wchar(datetime) 9,2 9,4,10 9,10(ODBC)9,10,12(OLE DB) 9,10(ODBC)9,10,12(OLE DB) 9,10 9,5,10 해당 없음 해당 없음
Char/wchar(datetimeoffset) 9,2,8 9,4,8,10 9,8,10(ODBC)9,8,10,12(OLE DB) 9,8,10(ODBC)9,8,10,12(OLE DB) 9,8,10 9,10 해당 없음 해당 없음

기호 설명

기호 의미
- 변환이 지원되지 않습니다.

ODBC 진단 레코드는 SQLSTATE 07006 및 "제한된 데이터 형식 특성 위반" 메시지와 함께 생성됩니다.
6 제공된 데이터가 유효하지 않으면 SQLSTATE 22007 및 "잘못된 날짜/시간 형식"이라는 메시지와 함께 ODBC 진단 레코드가 생성됩니다. datetimeoffset 값의 경우 UTC로의 변환이 요청되지 않더라도 시간 부분은 UTC로 변환한 후 범위 내에 있어야 합니다. 이는 TDS와 서버가 항상 UTC에 대한 datetimeoffset 값의 시간을 정규화하기 때문입니다. 따라서 클라이언트는 시간 구성 요소가 UTC로 변환한 후 지원되는 범위 내에 있는지 확인해야 합니다.
2 시간 구성 요소는 무시됩니다.
3 ODBC의 경우 데이터 손실이 있는 잘림이 발생하면 SQLSTATE 22001과 '문자열 데이터, 오른쪽 잘린' 메시지로 진단 레코드가 생성됩니다. 소수 자릿수(소수 자릿수)의 수는 다음 표에 따라 대상 열의 크기에서 결정됩니다. 테이블의 범위보다 큰 열 크기의 경우 7의 배율을 암시합니다. 이 변환은 ODBC에서 허용하는 최대값인 최대 9개의 소수 자릿수 초 자릿수를 허용해야 합니다.

형식: DBTIME2

암시적 소수 자릿수 0 8

암시적 배율 1..7 10,16



형식: DBTIMESTAMP

암시적 소수 자릿수 0: 19

암시적 배율 1..7: 21..27



형식: DBTIMESTAMPOFFSET

암시적 소수 자릿수 0: 26

암시된 소수 자릿수 1..7: 28..34

OLE DB의 경우 데이터 손실로 잘림이 발생하면 오류가 게시됩니다. datetime2의 경우 다음 표에 따라 소수 자릿수 초 숫자(소수 자릿수)가 대상 열의 크기에서 결정됩니다. 테이블의 범위보다 큰 열 크기의 경우 9의 배율을 암시합니다. 이 변환은 소수 자릿수 초의 자릿수를 OLE DB에서 허용하는 최대값인 9자리까지 허용합니다.

형식: DBTIME2

암시적 소수 자릿수 0 8

암시적 배율 1..9 1..9



형식: DBTIMESTAMP

암시적 소수 자릿수 0: 19

암시적 배율 1..9: 21..29



형식: DBTIMESTAMPOFFSET

암시적 소수 자릿수 0: 26

암시적 배율 1..9: 28..36
4 날짜 구성 요소가 무시됩니다.
5 표준 시간대는 UTC(예: 00:00)로 설정됩니다.
6 시간이 0으로 설정됩니다.
7 날짜는 1900-01-01로 설정됩니다.
8 표준 시간대 오프셋은 무시됩니다.
9 첫 번째 문장 부호 문자 및 나머지 구성 요소가 있는지 여부에 따라 문자열이 date, datetime, datetimeoffset 또는 time 값으로 구문 분석된 후 변환됩니다. 그런 다음 이 프로세스에서 검색한 원본 형식에 대해 이 항목의 끝에 있는 테이블의 규칙에 따라 문자열을 대상 형식으로 변환합니다. 제공된 데이터를 오류 없이 구문 분석할 수 없거나, 구성 요소 중 하나라도 허용 범위 밖에 있거나, 리터럴 형식에서 대상 형식으로의 변환이 없으면, 오류가 게시되거나(OLE DB) SQLSTATE 22018 및 "캐스트 사양의 문자 값이 올바르지 않습니다."라는 메시지가 포함된 ODBC 진단 레코드가 생성됩니다. datetime 및 smalldatetime 매개 변수의 경우 연도가 이러한 형식에서 지원하는 범위 밖에 있으면 오류가 게시되거나(OLE DB), SQLSATE 22007 및 "잘못된 날짜 시간 형식입니다."라는 메시지가 포함된 ODBC 진단 레코드가 생성됩니다.

datetimeoffset의 경우 UTC로의 변환이 요청되지 않더라도 값은 UTC로 변환한 후 범위 내에 있어야 합니다. 이는 TDS와 서버가 항상 UTC에 대한 datetimeoffset 값의 시간을 정규화하므로 클라이언트는 시간 구성 요소가 UTC로 변환한 후 지원되는 범위 내에 있는지 확인해야 하기 때문입니다. 값이 지원되는 UTC 범위 내에 있지 않으면 오류가 게시되거나(OLE DB) ODBC 진단 레코드가 SQLSTATE 22007 및 "잘못된 날짜/시간 형식"으로 생성됩니다.
10 클라이언트에서 서버로의 변환 시 잘림을 수행하여 데이터 손실이 발생하면 오류가 게시되거나(OLE DB), SQLSTATE 22008 및 "Datetime 필드 오버플로"라는 메시지가 포함된 ODBC 진단 레코드가 생성됩니다. 이 오류는 값이 서버에서 사용하는 UTC 범위로 나타낼 수 있는 범위를 벗어나는 경우에도 발생합니다. 서버에서 클라이언트로의 변환에서 초 또는 소수 자릿수 초 잘림이 발생하는 경우 경고만 있습니다.
11 잘림을 수행하여 데이터 손실이 발생하면 진단 레코드가 생성됩니다.

서버에서 클라이언트로 변환할 경우에는 경고(ODBC SQLSTATE S1000)입니다.

클라이언트-서버 변환에서 오류입니다(ODBC SQLSTATE 22001).
12 초는 0으로 설정되고 소수 자릿수 초는 무시됩니다. 잘림 오류는 없습니다.
해당 없음 기존 SQL Server 2005(9.x) 및 이전 동작은 유지 관리됩니다.

참고 항목

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