BUG: خطأ 22018 "حرف غير صالح قيمة مواصفات فريق العمل" مع SQL Server 6.5

ترجمات الموضوعات ترجمات الموضوعات
معرف المقالة: 269011 - عرض المنتجات التي تنطبق عليها هذه المقالة.
توسيع الكل | طي الكل

في هذه الصفحة

الأعراض

عندما تعمل API ODBC مثل SQLExecute استدعاءات إجراء مخزن الذي لديه استدعاء sp_getbindtoken أو الذي وقع مشغل الذي قام استدعاء sp_getbindtoken ، ربما تظهر رسالة الخطأ التالية:
DIAG [22018] [Microsoft] [تشغيل ملقم SQL ODBC] حرف غير صالح لقيمة مواصفات تحويل (0)
إرجاع SQL_SUCCESS_WITH_INFO SQLExecute ولكن تقارير الخطأ أعلاه.

الحل البديل

إزالة استدعاء إجراء النظام المخزن sp_getbindtoken أو قم بإزالة معلمات الإخراج.

تصريح

أقرت Microsoft هذا وجود مشكلة في SQL Server 6.5.

لا يحدث هذا الخطأ مع SQL Server 7.0 أو SQL Server 2000.

معلومات أخرى

يحدث هذا الخطأ مع SQL Server 6.5 ، بما في ذلك حزم الخدمة 1 خلال 5a فقط. لا يحدث هذا الخطأ عند استدعاؤها من isql الإجراء المخزن أو يحتوي على لم معلمات الإخراج.

عندما يتم استدعاء من أحد تطبيقات ODBC تنفيذ الإجراء المخزن إرجاع قيمة إرجاع تشير إلى نجاح ولكن بإنشاء هذا الخطأ مع لا تمرير للخلف معلمات الإخراج. إرجاع استدعاء API ODBC SQLExecute SQL_SUCCESS_WITH_INFO ورسالة الخطأ أعلاه.

خطوات إعادة إنشاء السلوك

  1. إنشاء مشغل و إجراء مخزن أو جدول في قاعدة بيانات Pubs استخدام برنامج نصي 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. تشغيل البرنامج النصي SQL التالي داخل isql. يجب أن ينجح و إدراج صف في جدول الاختبار 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. استدعاء الإجراء المخزن نفس من أحد تطبيقات ODBC باستخدام نموذج التعليمات البرمجية التالي. خطأ نفس يمكن أيضاً أن يتم نسخها باستخدام أداة اختبار ODBC عن طريق استدعاء الوظائف المعروض في نفس تسلسل.
    	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. يؤدي الخطوة أعلاه في حالة SQL 22018 ورسالة "قيمة حرف غير صالح مواصفات فريق العمل" مع رمز إرجاع الخاص SQL_SUCCESS_WITH_INFO. يكون التالي سجل تتبع ODBC نموذج:
    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) 
    					

الخصائص

معرف المقالة: 269011 - تاريخ آخر مراجعة: 19/جمادى الأولى/1428 - مراجعة: 3.2
تنطبق على
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
كلمات أساسية: 
kbmt kbbug kbdatabase kbpending KB269011 KbMtar
ترجمة آلية
هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية
اضغط هنا لرابط المقالة باللغة الانجليزية269011

إرسال ملاحظات

 

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