В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Ошибка: Ошибка 22018 «недопустимое символьное значение для спецификации приведения"с SQL Server 6.5

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:269011
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Проблема
При таких как функции API-Интерфейса ODBC SQLExecutet вызывает хранимую процедуру, которая содержит вызов процедура sp_getbindtoken или, вызывает срабатывание триггера, который должен вызывать процедура sp_getbindtoken, может появиться следующее сообщение об ошибке:
[22018] [Microsoft] [драйвер ODBC SQL Server] DIAG недопустимое символьное значение дляСпецификация приведения (0)
SQLExecutet Возвращает SQL_SUCCESS_WITH_INFO, но сообщает об ошибке выше.
Временное решение
Удалите вызов процедура sp_getbindtoken системной хранимой процедуры или исключить выходные параметры.
Статус
Корпорация Майкрософт подтверждает это проблемой в SQL Server 6.5.

Эта ошибка не возникает с SQL Server 7.0 или SQL Server 2000.
Дополнительная информация
Эта ошибка возникает только с SQL Server 6.5, включая пакеты обновления 1 (Sp1) через 5a. Эта ошибка не возникает, когда хранимая процедура вызывается из isql или не имеет выходных параметров.

При вызове из приложения ODBC выполнения хранимой процедуры возвращает возвращаемое значение, показывающее успешное завершение, но он выдает эту ошибку и не возвращать выходные параметры. Вызов интерфейса API ODBC SQLExecutet Возвращает SQL_SUCCESS_WITH_INFO и выше сообщение об ошибке.

Действия для воспроизведения поведения

  1. Создание таблицы, хранимые процедуры и триггер в базе данных Pubs, используя следующий сценарий SQL:
    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. Запустите следующий сценарий SQL внутри isql. Он должен успешно и вставить строку в тестовую таблицу, 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

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 269011 — последний просмотр: 12/05/2015 21:07:14 — редакция: 4.0

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

  • kbnosurvey kbarchive kbbug kbdatabase kbpending kbmt KB269011 KbMtru
Отзывы и предложения