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

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
Artikel ini telah diarsipkan. Artikel ditawarkan dalam bentuk "apa adanya" dan tidak akan dapat diperbarui lagi.
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 sahcast 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 )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. Menjalankan skrip SQL berikut di dalam isql. Harus sukses dan menyisipkan baris ke tes meja, 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. 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) 					
22018

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 269011 - Tinjauan Terakhir: 12/05/2015 21:07:10 - Revisi: 2.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 KbMtid
Tanggapan
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)