다음을 통해 공유


SQL Server 2005 Native Client에서 SQL Server 2008 R2 Native Client로 응용 프로그램 업데이트

이 항목에서는 SQL Server 2005의 SQL Server Native Client 이후에 SQL Server Native Client에 대해 이루어진 주요 변경 사항을 설명합니다.

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

SQL Server Native Client 10.0에서 변경된 동작

설명

OLE DB가 정의된 배율로만 패딩됩니다.

변환된 데이터가 서버로 전송되는 변환의 경우 SQL Server Native Client 10.0은 데이터의 후행 0을 datetime 값의 최대 길이까지만 패딩합니다. SQL Server Native Client 9.0 이전에서는 9자리까지 패딩되었습니다.

ICommandWithParameter::SetParameterInfo에 대한 DBTYPE_DBTIMESTAMP의 유효성을 검사합니다.

SQL Server Native Client 10.0은 ICommandWithParameter::SetParameterInfo의 bScale이 DBTYPE_DBTIMESTAMP에 대해 소수 자릿수 초의 정밀도로 설정되어야 하는 OLE DB 요구 사항을 구현합니다.

이제 sp_columns 저장 프로시저는 IS_NULLABLE 열에 대해 "NO " 대신 "NO"를 반환합니다.

SQL Server Native Client 10.0에서 sp_columns 저장 프로시저는 IS_NULLABLE 열에 대해 "NO " 대신 "NO"를 반환합니다.

이제 SQLSetDescRec, SQLBindParameterSQLBindCol에서 일관성 검사를 수행합니다.

SQL Server Native Client 10.0 이전에서 SQL_DESC_DATA_PTR을 설정하면 SQLSetDescRec, SQLBindParameter 또는 SQLBindCol의 설명자 형식에 대해 일관성 검사가 수행되지 않았습니다.

이제 SQLCopyDesc에서 설명자 일관성 검사를 수행합니다.

SQL Server Native Client 10.0 이전에서 SQLCopyDesc는 특정 레코드에 SQL_DESC_DATA_PTR 필드가 설정된 경우 일관성 검사를 수행하지 않았습니다.

SQLGetDescRec에서 더 이상 설명자 일관성 검사를 수행하지 않습니다.

SQL Server Native Client 10.0 이전에서 SQLGetDescRec는 SQL_DESC_DATA_PTR 필드가 설정된 경우 설명자 일관성 검사를 수행했습니다. ODBC 사양과 SQL Server Native Client 10.0에서는 필요하지 않았으므로 이 일관성 검사는 더 이상 수행되지 않습니다.

데이터가 범위를 벗어날 때 서로 다른 오류가 반환되었습니다.

datetime 유형의 경우 범위를 벗어난 날짜에 대해 이전 버전에서 반환된 것과는 다른 오류 번호가 SQL Server Native Client 10.0에서 반환됩니다.

구체적으로, SQL Server Native Client 9.0에서는 datetime으로의 문자열 변환 시 범위를 벗어난 모든 연도 값에 대해 22007을 반환했지만 SQL Server Native Client 10.0에서는 날짜가 datetime2에서 지원되는 범위 내에 있지만 datetime 또는 smalldatetime에서 지원되는 범위를 벗어날 때 22008을 반환합니다.

반올림이 일을 변경하는 경우 datetime 값은 소수 자릿수 초를 자르고 반올림되지 않습니다.

SQL Server Native Client 10.0 이전에는 서버로 전송된 datetime 값에 대한 클라이언트 동작에 의해 값이 1초의 1/300에 가깝게 반올림됩니다. In SQL Server Native Client 10.0에서 이 시나리오를 사용하면 반올림으로 인해 일이 변경되는 경우 소수 자릿수 초가 잘립니다.

datetime 값에서 초가 잘릴 수 있습니다.

SQL Server 2008 Native Client 이상 버전을 사용하여 빌드한 응용 프로그램에서 SQL Server 2005 이상 버전의 서버에 연결할 경우 일반 식별자인 DBTYPE_DBTIMESTAMP(OLE DB) 또는 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 Native Client 이전에는 datetime 값이 datetime 및 smalldatetime 열의 소수 자릿수에 맞게 SQL Server에서 반올림되었습니다. SQL Server 2008 Native Client 및 이후 버전에서는 소수 자릿수에 대한 ODBC 핵심 사양에 정의된 보다 엄격한 유효성 검사 규칙을 적용합니다. 후행 숫자의 잘림 없이 클라이언트 바인딩에 의해 지정 또는 암시된 소수 자릿수를 사용하여 매개 변수 값을 SQL 유형으로 변환할 수 없는 경우 오류가 반환됩니다.

트리거가 실행될 때 SQL Server에서 다른 결과를 반환할 수 있습니다.

SQL Server 2008에서 변경된 사항으로 인해 NOCOUNT OFF가 적용될 때 트리거를 실행하는 문에서 다른 결과가 반환될 수도 있습니다. 이 경우 응용 프로그램에서 오류가 발생할 수 있습니다. 이 오류를 해결하려면 트리거에 NOCOUNT ON을 설정하거나 SQLMoreResults를 호출하여 다음 결과로 이동합니다.