BUG: Kesalahan 22018 "karakter tidak sah nilai untuk pemain spesifikasi" dengan SQL Server 6,5

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 269011 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika API ODBC fungsi seperti SQLExecute memanggil stored procedure yang memiliki panggilan untuk sp_getbindtoken atau bahwa kebakaran pemicu yang memiliki panggilan untuk sp_getbindtoken, Anda dapat melihat pesan galat berikut:
DIAG [22018] [Microsoft] [ODBC SQL Server Driver] nilai karakter tidak sah cast Spesifikasi (0)
SQLExecute kembali SQL_SUCCESS_WITH_INFO tetapi laporan kesalahan di atas.

TEKNIK PEMECAHAN MASALAH

Menghapus panggilan untuk sp_getbindtoken sistem disimpan prosedur, atau menghilangkan parameter output.

STATUS

Microsoft telah mengkonfirmasi ini menjadi masalah dalam SQL Server 6,5.

Kesalahan ini tidak terjadi dengan SQL Server 7.0 atau SQL Server 2000.

INFORMASI LEBIH LANJUT

Galat ini terjadi hanya dengan SQL Server 6.5, termasuk paket layanan 1 melalui 5a. Kesalahan ini tidak terjadi ketika disimpan prosedur disebut dari isql atau tidak memiliki output parameter.

Saat dipanggil dari aplikasi ODBC, disimpan prosedur pelaksanaan mengembalikan nilai kembali menunjukkan keberhasilan, tetapi menghasilkan kesalahan ini dan tidak memberikan kembali keluaran parameter. ODBC API panggilan SQLExecute kembali SQL_SUCCESS_WITH_INFO dan pesan kesalahan di atas.

Langkah-langkah untuk mereproduksi perilaku

  1. Membuat tabel, prosedur yang disimpan, dan memicu dalam database Pub menggunakan skrip SQL berikut:
    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. Menjalankan skrip SQL berikut di dalam isql. Harus sukses dan menyisipkan baris ke tes meja, 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. Memanggil stored procedure sama dari ODBC aplikasi yang menggunakan kode contoh berikut. Kesalahan yang sama dapat juga direproduksi menggunakan ODBC uji perangkat dengan memanggil fungsi ditampilkan dalam urutan yang sama.
    	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. Langkah diatas menghasilkan SQL negara 22018 dan "nilai karakter tidak sah untuk pemain spesifikasi" pesan dengan kode kembali SQL_SUCCESS_WITH_INFO. Berikut ini adalah contoh ODBC jejak log:
    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) 
    					

Properti

ID Artikel: 269011 - Kajian Terakhir: 22 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
Kata kunci: 
kbbug kbdatabase kbpending kbmt KB269011 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:269011

Berikan Masukan

 

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