Chyba: Chyba 22018 "neplatný znak hodnota pro specifikaci přetypování" s SQL Server verze 6.5

Překlady článku Překlady článku
ID článku: 269011 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při ODBC API fungovat například SQLExecute volání uložené procedury, který má volání sp_getbindtoken nebo, je aktivační událost, která má volání sp_getbindtoken, může se zobrazit následující chybová zpráva:
DIAG [22018] [Microsoft] [ODBC SQL Server Driver] neplatný znak hodnota pro cast (0)
Vrátí hodnotu SQL_SUCCESS_WITH_INFO SQLExecute, ale hlásí chybu výše.

Jak potíže obejít

Odebrat volání sp_getbindtoken systémovou uloženou proceduru nebo eliminovat výstupní parametry.

Prohlášení

Společnost Microsoft potvrzuje, že se to být problém v serveru SQL Server 6.5.

K této chybě nedochází s SQL Server 7.0 nebo SQL Server 2000.

Další informace

K této chybě dochází pouze s SQL Server 6.5 Service Pack 1 včetně prostřednictvím 5a. K této chybě nedochází při je volána ze isql nebo neobsahuje žádné výstupní parametry uložené procedury.

Při volání z aplikace ODBC spuštění uložené procedury vrátí vratky hodnotu označující úspěch, ale generuje tuto chybu a nepředá zpět výstupní parametry. Volání ODBC API SQLExecute vrátí SQL_SUCCESS_WITH_INFO a výše chybová zpráva.

Kroky pro reprodukci chování

  1. Vytvoření tabulky, uložené procedury a aktivační procedury v databázi pubs pomocí následující skript SQL:
    create table emp_table (emp_id int primary key,
                            emp_name varchar(80) not null )
    go
    
    create trigger TR_emp_table_ins on emp_table
    for insert as
    begin
        declare @token_value varchar(255)
        exec master..sp_getbindtoken @token_value output
    end
    go
    
    create procedure test_proc_one
        @return_code int output,
        @error_code int output
    as
    begin
        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
        end
    
    end /* procedure test_proc_one */ 
    go
    					
  2. Spusťte následující skript SQL uvnitř isql. Mají být úspěšná a vložit řádek do tabulky test emp_table:
    declare @ret_value int
    declare @err_code int
    declare @string varchar(255)
    
    select @ret_value = 10
    select @err_code = 20
    
    exec test_proc_one @ret_value output, @err_code output
    
    select @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 @string
    
    select * from emp_table
    					
  3. Volání uložené procedury stejné z ODBC aplikace pomocí následující ukázkový kód. Stejná chyba může také být reprodukována pomocí nástroje ODBC test voláním funkce zobrazené ve stejném pořadí.
    	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. Výše uvedený krok výsledky v SQL stavu 22018 a zprávu "neplatný znak hodnota přetypování specifikace" s návratový kód SQL_SUCCESS_WITH_INFO. Protokol trasování ODBC ukázkové je následující:
    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) 
    					

Vlastnosti

ID článku: 269011 - Poslední aktualizace: 5. června 2007 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
Klíčová slova: 
kbmt kbbug kbdatabase kbpending KB269011 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:269011

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com