BUG: 오류 22018 "잘못된 문자 값으로 사양에 대한" SQL Server 6.5

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

269011
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
현상
ODBC API 함수 호출이 sp_getbindtoken 수 있거나 sp_getbindtoken 호출하여 트리거를 발생시키는 저장된 프로시저를 같은 SQLExecute 호출을 때 다음 오류 메시지가 나타날 수 있습니다.
[22018] [Microsoft] [ODBC SQL Server 드라이버] DIAG 잘못된 문자 값을 캐스트 사양의 (0)
SQLExecute SQL_SUCCESS_WITH_INFO 반환하지만 위의 오류를 보고합니다.
해결 과정
sp_getbindtoken 시스템 저장 프로시저에 대한 호출을 제거하거나 출력 매개 변수를 제거하십시오.
현재 상태
Microsoft는 이 SQL Server 6.5 문제를 확인했습니다.

SQL Server 7.0 또는 SQL Server 2000이 이 오류가 발생하지 않습니다.
추가 정보
이 오류는 5a 통해 서비스 팩 1을 포함하여 SQL Server 6.5를 사용하는 경우에만 발생합니다. isql 에서 저장된 프로시저를 호출하거나 출력 매개 변수가 없는 경우 이 오류가 발생하지 않습니다.

ODBC 응용 프로그램에서 호출되는 경우 저장된 프로시저 실행의 성공을 나타내는 반환 값을 반환하지만 이 오류를 생성하고 다시 출력 매개 변수를 전달하지 않습니다. ODBC API 호출은 SQLExecute SQL_SUCCESS_WITH_INFO 위의 오류 메시지를 반환합니다.

문제를 재현하기 위한 단계

  1. 다음 SQL 스크립트를 사용하여 Pubs 데이터베이스의 테이블, 저장된 프로시저 및 트리거를 만드는:
    create table emp_table (emp_id int primary key,                        emp_name varchar(80) not null )gocreate trigger TR_emp_table_ins on emp_tablefor insert asbegin    declare @token_value varchar(255)    exec master..sp_getbindtoken @token_value outputendgocreate procedure test_proc_one    @return_code int output,    @error_code int outputasbegin    declare @token_value varchar(255)    declare @max_emp_id int    select @return_code = 13    begin tran    select @max_emp_id = max(emp_id) from emp_table    if @max_emp_id is null    begin        select @max_emp_id = 1    end    else    begin        select @max_emp_id = @max_emp_id + 1    end    insert into emp_table values(@max_emp_id, 'John Doe')    if @@error <> 0    begin        raiserror('Insert into employee_list failed for emp_id %d', 16, -1, @max_emp_id)        rollback tran        select @return_code = -100        select @error_code = -200    end    else    begin        commit tran        select @return_code = 0        select @error_code = 2    endend /* procedure test_proc_one */ go					
  2. isql 안에 다음 SQL 스크립트를 실행하십시오. 성공할 수 및 emp_table 테스트 테이블로 행을 삽입하려고 합니다:
    declare @ret_value intdeclare @err_code intdeclare @string varchar(255)select @ret_value = 10select @err_code = 20exec test_proc_one @ret_value output, @err_code outputselect @string = 'test_proc_one set ret_value to ' + rtrim(convert(varchar(16), @ret_value))                 + ' and err_code to ' + rtrim(convert(varchar(16), @err_code))print @stringselect * from emp_table					
  3. 다음 예제 코드를 사용하여 ODBC 응용 프로그램에서 같은 저장된 프로시저를 호출하십시오. 동일한 시퀀스가 표시된 함수를 호출하여 ODBC 테스트 도구를 사용하여 동일한 오류 또한 재현할 수 있습니다.
    	SQLRETURN rc;	SQLCHAR*  SQLStr = "{call test_proc_one(?,?)}";   	SQLINTEGER nReturnCode = SQL_NTS;	SQLINTEGER nErrorCode = SQL_NTS;	SQLINTEGER cbReturnCode = SQL_NTS;	SQLINTEGER cbErrorCode = SQL_NTS;	/* Prepare the statement, bind parameters, and execute the statement */ 	rc = SQLPrepare(hStmt, SQLStr, SQL_NTS);	rc = SQLBindParameter(hStmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, 		                    0, 0, &nReturnCode, 0, &cbReturnCode);	rc = SQLBindParameter(hStmt, 2, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER,		                    0, 0, &nErrorCode, 0, &cbErrorCode);	rc = SQLExecute(hStmt);	do {	   rc = SQLMoreResults(hStmt);	} while (rc != SQL_NO_DATA);					
  4. 위의 단계는 SQL 상태 22018, SQL_SUCCESS_WITH_INFO의 반환 코드 사용하여 "사양에 대한 잘못된 문자 값" 메시지가 발생합니다. 다음 샘플에서는 ODBC 추적 로그에 있습니다:
    mssamp          163:166	EXIT  SQLExecute  with return code 1 (SQL_SUCCESS_WITH_INFO)		HSTMT               0x00cc2158		DIAG [22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (0) 					
22018

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

속성

문서 ID: 269011 - 마지막 검토: 12/05/2015 21:07:11 - 수정: 3.2

Microsoft SQL Server 6.5 Standard Edition, Microsoft Data Access Components 2.1, Microsoft Data Access Components 2.5

  • kbnosurvey kbarchive kbmt kbbug kbdatabase kbpending KB269011 KbMtko
피드백