FIX: 테이블 이름, 기간 포함될 때 SQLColAttribute 잘못된 테이블 특성 반환합니다.

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

290646
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
# BUG: 46409 (SHILOH_bug)
# 버그: 56030 (sqlbug_70)
현상
SQL_DESC_SCHEMA_NAME, SQL_DESC_TABLE_NAME, SQL_DESC_BASE_TABLE_NAME, SQL_DESC_CATALOG_NAME 또는 설명자 정보를 반환하려면 SQLColAttribute 함수를 사용하면 테이블 이름에 마침표가 있습니다 때 잘못된 값이 반환될 수 있습니다.
원인
ODBC는 SQL Server 개체 형식으로 Computer.Database.Owner.Object 구분하려면 마침표를 사용합니다.
해결 방법

SQL Server 2000

이 문제를 해결하려면 Microsoft SQL Server 2000의 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
290211INF: SQL Server 2000의 최신 서비스 팩을 구하는 방법

SQL Server 7.0

이 문제를 해결하려면 SQL Server 개체의 이름 내에서 마침표를 사용하지 마십시오.

Microsoft 데이터 액세스 구성 요소 (MDAC)

이 문제를 해결하려면 Microsoft 데이터 액세스 구성 요소 2.6 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
300635정보: 최신 MDAC 2.6 구하는 방법 서비스 팩
현재 상태
Microsoft 문제는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.

SQL Server 2000

이 문제는 SQL Server 2000 서비스 팩 1에서 처음 수정되었습니다.

Microsoft 데이터 액세스 구성 요소 (MDAC)

이 문제는 Microsoft 데이터 액세스 구성 요소 2.6 서비스 팩 1에서 처음 수정되었습니다.
추가 정보

문제를 재현하기 위한 단계

  1. 새 .cpp 파일에 다음 코드를 붙여:
    #include <windows.h>#include <stdio.h>#include <tchar.h>#include "sql.h"#include "sqlext.h"#include "odbcss.h"int main()    {    // ODBC handles    SQLHENV     henv = NULL;    SQLHDBC     hdbc = NULL;    SQLHSTMT    hstmt = NULL;	char szData[100];	short l; 	//These must be modified for your specific DSN    PTSTR       szDataSource = _T("localserver");    PTSTR       szUID = _T("UserName");    PTSTR       szPWD = _T("Password");	PTSTR		szDropTable = _T("if exists (select * from dbo.sysobjects where id = object_id(N'[my.table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [my.table]");	PTSTR		szCreateTable = _T("Create Table [my.table] (col1 int)");	PTSTR       szSQLSelect = _T("Select * from dbo.[my.table]");    // Initialize the ODBC environment.    if (SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv) == SQL_ERROR)        goto EXIT;    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, SQL_IS_INTEGER);    // Allocate a connection handle and connect to the data source.    if (SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc) == SQL_ERROR)        goto EXIT;    if (SQLConnect(hdbc, (SQLTCHAR*) szDataSource, SQL_NTS, (SQLTCHAR*) szUID, SQL_NTS, (SQLTCHAR*) szPWD, SQL_NTS) == SQL_ERROR)        goto EXIT;    // Get a statement handle and execute a Transact-SQL SELECT statement.    if (SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt) == SQL_ERROR)        goto EXIT;	if(SQLSetScrollOptions( hstmt, SQL_CONCUR_VALUES, SQL_SCROLL_DYNAMIC, 1) == SQL_ERROR)		goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szDropTable, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szCreateTable, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLExecDirect(hstmt, (SQLTCHAR*) szSQLSelect, SQL_NTS) == SQL_ERROR)        goto EXIT;	if (SQLColAttribute(hstmt, 1, SQL_DESC_SCHEMA_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_SCHEMA_NAME = %s, should be dbo\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_TABLE_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_TABLE_NAME = %s, should be my.table\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_BASE_TABLE_NAME , &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_BASE_TABLE_NAME = %s, should be my.table\n"),szData);	if (SQLColAttribute(hstmt, 1, SQL_DESC_CATALOG_NAME, &szData, 100, &l, NULL) ==SQL_ERROR)		goto EXIT;	_tprintf(_T("SQL_DESC_CATALOG_NAME = %s, should be database specified in dsn\n"),szData);EXIT:    if (hstmt != NULL)        {        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);        }    if (hdbc != NULL)        {        SQLDisconnect(hdbc);        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);        }    if (henv != NULL)        {        SQLFreeHandle(SQL_HANDLE_ENV, henv);        }    return (0);    }					
  2. 코드를 컴파일하고 이를 실행하십시오. 결과는 다음과 같습니다:
    SQL_DESC_SCHEMA_NAME = my, should be dboSQL_DESC_TABLE_NAME = table, should be my.tableSQL_DESC_BASE_TABLE_NAME = table, should be my.tableSQL_DESC_CATALOG_NAME = dbo, should be database specified in dsn					

경고: 이 문서는 자동 번역되었습니다

속성

문서 ID: 290646 - 마지막 검토: 01/16/2015 21:48:39 - 수정: 3.2

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbmdac260sp1fix kbsqlserv2000sp1fix KB290646 KbMtko
피드백