SQL Server 2005 Native Client에서 애플리케이션 업데이트

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

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의 경우 이 지원 수명 주기 예외를 참조하세요.

이 항목에서는 SQL Server 2005(9.x)의 SQL Server Native Client 이후 SQL Server Native Client의 호환성이 손상되는 변경에 대해 설명합니다.

MDAC(Microsoft Data Access Components)에서 SQL Server Native Client로 업그레이드하는 경우 몇 가지 동작 차이점이 표시될 수도 있습니다. 자세한 내용은 MDAC에서 SQL Server Native Client로 애플리케이션 업데이트를 참조하세요.

SQL Server 2005(9.x)와 함께 제공되는 SQL Server Native Client 9.0. SQL Server 2008(10.0.x)와 함께 제공되는 SQL Server Native Client 10.0 SQL Server 2008 R2(10.50.x)와 함께 제공되는 SQL Server Native Client 10.5 SQL Server 및 SQL Server 2012(11.x)와 함께 제공되는 SQL Server 2014(12.x) Native Client 11.0.

SQL Server 2005(9.x) 이후 SQL Server Native Client에서 변경된 동작 설명
OLE DB가 정의된 배율로만 패딩됩니다. 변환된 데이터가 서버로 전송되는 변환의 경우 SQL Server Native Client(SQL Server 2008(10.0.x부터 시작))는 날짜/시간 값의 최대 길이까지만 데이터의 후행 0을 패딩합니다. 9자리까지 패딩된 SQL Server Native Client 9.0입니다.
ICommandWithParameter::SetParameterInfo에 대한 DBTYPE_DBTIMESTAMP의 유효성을 검사합니다. SQL Server Native Client(SQL Server 2008(10.0.x부터)는 ICommandWithParameter::SetParameterInfo의 bScale에 대한 OLE DB 요구 사항을 DBTYPE_DBTIMESTAMP 소수 자릿수 초의 전체 자릿수로 설정하도록 구현합니다.
이제 sp_columns 저장 프로시저는 IS_NULLABLE 열에 대해 "NO " 대신 "NO"를 반환합니다. SQL Server Native Client 10.0(SQL Server 2008(10.0.x))부터 sp_columns 저장 프로시저는 이제 IS_NULLABLE 열에 대해 "NO" 대신 "NO"를 반환합니다.
이제 SQLSetDescRec, SQLBindParameter 및 SQLBindCol에서 일관성 검사를 수행합니다. SQL Server Native Client 10.0 이전에는 SQL_DESC_DATA_PTR 설정해도 SQLSetDescRec, SQLBindParameter 또는 SQLBindCol의 설명자 형식에 대한 일관성 검사가 발생하지 않았습니다.
SQLCopyDesc는 이제 설명자 일관성 검사를 수행합니다. SQL Server Native Client 10.0 이전에는 SQL_DESC_DATA_PTR 필드가 특정 레코드에 설정된 경우 SQLCopyDesc에서 일관성 검사를 수행하지 않았습니다.
SQLGetDescRec는 더 이상 설명자 일관성 검사를 수행하지 않습니다. SQL Server Native Client 10.0 이전에는 SQL_DESC_DATA_PTR 필드가 설정되었을 때 SQLGetDescRec에서 설명자 일관성 검사를 수행했습니다. ODBC 사양 및 SQL Server Native Client 10.0(SQL Server 2008(10.0.x) 이상 버전에서는 이 일관성 검사가 더 이상 수행되지 않습니다.
데이터가 범위를 벗어날 때 서로 다른 오류가 반환되었습니다. datetime 형식의 경우 이전 버전에서 반환된 것보다 범위를 벗어난 날짜에 대해 SQL Server Native Client(SQL Server 2008(10.0.x)부터)에서 다른 오류 번호가 반환됩니다.

특히 SQL Server Native Client 9.0은 문자열을 datetime으로 변환할 때 범위 외의 모든 연도 값에 대해 22007을 반환했으며, 버전 10.0(SQL Server 2008(10.0.x)으로 시작하는 SQL Server Native Client는 날짜가 datetime2에서 지원하는 범위 내에 있지만 datetime 또는 smalldatetime에서 지원하는 범위를 벗어나면 22008을 반환합니다.
반올림이 일을 변경하는 경우 datetime 값은 소수 자릿수 초를 자르고 반올림되지 않습니다. SQL Server Native Client 10.0 이전에는 서버로 전송된 datetime 값에 대한 클라이언트 동작에 의해 값이 1초의 1/300에 가깝게 반올림됩니다. SQL Server Native Client 10.0부터 이 시나리오에서는 반올림이 하루를 변경하는 경우 소수 자릿수 초의 잘림이 발생합니다.
datetime 값에서 초가 잘릴 수 있습니다. SQL Server 2005 서버에 연결하는 SQL Server 2008(10.0.x) Native Client(이상)로 빌드된 애플리케이션은 OLE DB(DBTYPE_DBTIMESTAMP) 또는 SQL_TIMESTAMP(ODBC) 및 크기가 0인 datetime 열에 바인딩하는 경우 서버로 전송되는 데이터의 시간 부분에 대해 초 및 소수 초를 자립니다.

다음은 그 예입니다.

입력 데이터: 1994-08-21 21:21:36.000

삽입된 데이터: 1994-08-21 21:21:00.000
DBTYPE_DBTIME에서 DBTYPE_DATE로 OLE DB 데이터 변환을 수행할 때 더 이상 일이 변경되지 않습니다. SQL Server Native Client 10.0 이전에는 DBTYPE_DATE의 시간 부분이 자정의 1/2초 내에 있는 경우 OLE DB 변환 코드로 인해 일이 변경되었습니다. SQL Server Native Client 10.0부터는 날짜가 변경되지 않습니다(소수 자릿수 초는 잘리고 반올림되지 않음).
IBCPSession::BCColFmt 변환이 변경됩니다. SQL Server Native Client 10.0부터 IBCPSession::BCOColFmt를 사용하여 SQLDATETIME 또는 SQLDATETIME을 문자열 형식으로 변환하면 소수 값이 내보내집니다. 예를 들어 SQLDATETIME 형식을 SQLNVARCHARMAX 형식으로 변환할 때 이전 버전의 SQL Server Native Client가 반환되었습니다.

1989-02-01 00:00:00. SQL Server Native Client 10.0 이상 버전은 1989-02-01 00:00:00.0000000을 반환합니다.
전송된 데이터의 크기는 SQL_LEN_DATA_AT_EXEC 지정된 길이와 일치해야 합니다. SQL_LEN_DATA_AT_EXEC 사용하는 경우 데이터의 크기는 SQL_LEN_DATA_AT_EXEC 지정한 길이와 일치해야 합니다. SQL_DATA_AT_EXEC 사용할 수 있지만 SQL_LEN_DATA_AT_EXEC 사용할 경우 잠재적인 성능 이점이 있습니다.
이제 BCP API를 사용하는 사용자 지정 애플리케이션에서 경고를 볼 수 있습니다. 데이터 길이가 모든 유형의 필드에 대해 지정된 길이보다 큰 경우 BCP API에서 경고 메시지를 생성합니다. 이전에는 이 경고가 문자 유형에 대해서만 제공되었으며 모든 유형에 대해 실행되지 않습니다.
날짜/시간 유형으로 바인딩된 sql_variant에 빈 문자열을 삽입하면 오류가 생성됩니다. SQL Server Native Client 9.0에서는 날짜/시간 유형으로 바인딩된 sql_variant에 빈 문자열을 삽입해도 오류가 생성되지 않았습니다. SQL Server Native Client 10.0 이상에서는 이 상황에서 오류가 올바르게 생성됩니다.
더 엄격한 SQL_C_TYPE _TIMESTAMP 및 DBTYPE_DBTIMESTAMP 매개 변수 유효성 검사입니다. SQL Server 2008(10.0.x) Native Client 이전에는 날짜/시간 값이 SQL Server에서 datetimesmalldatetime 열의 배율에 맞게 반올림되었습니다. SQL Server 2008(10.0.x) Native Client(이상)는 소수 자릿수 초 동안 ODBC 코어 사양에 정의된 더 엄격한 유효성 검사 규칙을 적용합니다. 후행 숫자를 잘림하지 않고 클라이언트 바인딩에서 지정하거나 암시하는 배율을 사용하여 매개 변수 값을 SQL 형식으로 변환할 수 없는 경우 오류가 반환됩니다.
트리거가 실행될 때 SQL Server에서 다른 결과를 반환할 수 있습니다. SQL Server 2008(10.0.x)에서 변경된 사항으로 인해 NOCOUNT OFF가 적용될 때 트리거를 실행하는 명령문에서 다른 결과가 반환될 수도 있습니다. 이 경우 애플리케이션에서 오류가 발생할 수 있습니다. 이 오류를 해결하려면 트리거에서 NOCOUNT ON을 설정하거나 SQLMoreResults를 호출하여 다음 결과로 진행합니다.

참고 항목

SQL Server Native Client 프로그래밍