Hata: <a1>hata</a1> 22018 "ınvalid character value for cast specification" ile SQL Server 6.5

Makale çevirileri Makale çevirileri
Makale numarası: 269011 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Bir saklı yordam çağrısı sp_getbindtoken olan veya, bir ça?r? sp_getbindtoken olan bir tetikleyici harekete SQLExecute aramaları gibi bir ODBC API işlev zaman, aşağıdaki hata iletisi görebilirsiniz:
DIAG [22018] [Microsoft] [ODBC SQL Server sürücüsü] ınvalid character value for cast specification (0)
SQLExecute SQL_SUCCESS_WITH_INFO verir, ancak yukarıdaki hatası bildiriyor.

Pratik Çözüm

Çağrı sp_getbindtoken Sistem saklı yordamını kaldırmak veya çıkış parametrelerini kaldırın.

Durum

Microsoft bu sorunun, SQL Server 6.5 olmasını onaylamıştır.

Bu hata, SQL Server 7.0 veya SQL Server 2000 ile oluşmaz.

Daha fazla bilgi

Bu hata, yalnızca SQL Server 6.5, Service Pack 1 5a dahil olan oluşur. Saklı yordamın isql verilir veya hiçbir çıktı parametresi, bu hata oluşmaz.

Bir ODBC uygulaması çağrıldığında, saklı yordamı yürütme, başarı gösteren bir dönüş değeri verir, ancak bu hata üretir ve yeniden çıkış parametreleri vermeyen. ODBC API çağrısı SQLExecute SQL_SUCCESS_WITH_INFO ve yukarıdaki hata iletisini döndürür.

Davranışı yeniden oluşturma adımları

  1. Bir tablo, bir saklı yordam ve tetikleyici Pubs veritabanına aşağıdaki SQL komut dosyası kullanarak oluşturun:
    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. Isql içinde aşağıdaki SQL komut dosyasını çalıştırın. Başarılı olması ve emp_table sınama tablosuna bir satır ekleyin:
    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. Saklı yordamı aşağıdaki örnek kodu kullanarak bir ODBC uygulamadan arayın. Aynı hata da aynı sıra ile gösterilen işlevlerini çağırarak, ODBC sınama aracını kullanarak yeniden.
    	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. Yukarıdaki adım SQL durumu 22018 ve "ınvalid character value for cast specification" iletisini bir dönüş kodu, SQL_SUCCESS_WITH_INFO ile sonuçlanır. Aşağıda bir örnek ODBC izleme günlüğü vardır:
    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) 
    					

Özellikler

Makale numarası: 269011 - Last Review: 5 Haziran 2007 Salı - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
Anahtar Kelimeler: 
kbmt kbbug kbdatabase kbpending KB269011 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:269011

Geri Bildirim Ver

 

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