Fehler: Fehler 22018 "Ungültiger Zeichenwert für Umwandlungsspezifikation" mit SQL Server 6.5

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 269011
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Problembeschreibung
Wenn eine ODBC-API funktioniert z. B. SQLExecute Aufrufe eine gespeicherte Prozedur mit einen Aufruf von Sp_getbindtoken oder, die einen Trigger, der einen Aufruf von Sp_getbindtoken hat auslöst, wird möglicherweise die folgenden Fehlermeldung angezeigt:
DIAG [22018] [Microsoft] [ODBC SQL Server Driver] Zeichenwert für Umwandlungsspezifikation (0) ist ungültig
SQLExecute SQL_SUCCESS_WITH_INFO zurückgegeben jedoch meldet den oben genannten Fehler.
Abhilfe
Entfernen des Aufrufs der gespeicherten Systemprozedur Sp_getbindtoken oder beseitigen die Ausgabeparameter.
Status
Microsoft hat ein Problem in SQL Server 6.5 dazu bestätigt.

Dieser Fehler tritt bei SQL Server 7.0 oder SQL Server 2000 nicht auf.
Weitere Informationen
Dieser Fehler tritt nur mit SQL Server 6.5, Service Pack 1 über 5a einschließlich. Dieser Fehler tritt nicht auf, wenn die gespeicherte Prozedur von Isql aufgerufen wird oder keine Ausgabeparameter hat.

Wenn aus einer ODBC-Anwendung aufgerufen wird, gibt die Ausführung der gespeicherten Prozedur einen Rückgabewert, Erfolg zurück, aber wird dieser Fehler erzeugt und übergibt nicht wieder die Ausgabeparameter. Der ODBC API-Aufruf SQLExecute zurückgegeben SQL_SUCCESS_WITH_INFO und oben Fehlermeldung.

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie eine Tabelle, einer gespeicherten Prozedur und ein Trigger in der Pubs-Datenbank mithilfe des folgenden SQL-Skripts:
    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. Führen Sie das folgende SQL-Skript in Isql . Sollte erfolgreich sein und eine Zeile in der Tabelle "Test" Emp_table einfügen:
    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. Rufen Sie die gleiche gespeicherte Prozedur aus einer ODBC-Anwendung mit dem folgenden Beispielcode. Der gleiche Fehler kann auch mit dem ODBC Test-Tool durch den Aufruf von dargestellten Funktionen in derselben Reihenfolge reproduziert werden.
    	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. Die oben genannten Schritt Ergebnisse in der SQL-Status 22018 und "Zeichenwert für Umwandlungsspezifikation ist ungültig" Nachricht mit einem Rückgabecode von SQL_SUCCESS_WITH_INFO. Es folgt ein Beispiel ODBC-Protokoll der Ablaufverfolgung:
    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

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 269011 – Letzte Überarbeitung: 12/05/2015 21:07:06 – Revision: 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 KbMtde
Feedback