L?I: L?i 22018 "k? t? không h?p l? cho di?n viên đ?c t?"v?i giá tr? SQL Server 6,5

ID c?a bài: 269011 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TRI?U CH?NG

Khi m?t ODBC API ch?c năng như SQLExecute g?i m?t th? t?c đư?c lưu tr? mà có m?t cu?c g?i đ?n sp_getbindtoken ho?c r?ng cháy m?t kích ho?t có m?t cu?c g?i đ?n sp_getbindtoken, b?n có th? nh?n th?y thông báo l?i sau:
DIAG [22018] [Microsoft] [ODBC SQL Server Driver] giá tr? k? t? không h?p l? cho di?n viên đ?c đi?m k? thu?t (0)
SQLExecute tr? v? SQL_SUCCESS_WITH_INFO nhưng báo cáo l?i trên.

CÁCH GI?I QUY?T KHÁC

Lo?i b? các cu?c g?i đ?n các sp_getbindtoken h? th?ng lưu tr? th? t?c, ho?c lo?i b? các tham s? đ?u ra.

T?NH TR?NG

Microsoft đ? xác nh?n đi?u này là m?t v?n đ? trong SQL Server 6.5.

L?i này không x?y ra v?i SQL Server 7.0 ho?c SQL Server 2000.

THÔNG TIN THÊM

X?y ra l?i này ch? v?i SQL Server 6.5, bao g?m c? Service Pack 1 thông qua 5a. L?i này không x?y ra khi các th? t?c đư?c lưu tr? đư?c g?i là t? isql ho?c không có tham s? đ?u ra.

Khi đư?c g?i là t? m?t ?ng d?ng ODBC, th?c hi?n th? t?c đư?c lưu tr? tr? v? m?t giá tr? tr? l?i ch? ra s? thành công, nhưng nó t?o ra các l?i này và không vư?t qua l?i các tham s? đ?u ra. Các cu?c g?i ODBC API SQLExecute tr? v? SQL_SUCCESS_WITH_INFO và thông báo l?i ? trên.

Các bư?c đ? t?o l?i hành vi

  1. T?o m?t b?ng, m?t th? t?c đư?c lưu và kích ho?t m?t trong quán rư?u cơ s? d? li?u b?ng cách s? d?ng đo?n m? SQL sau đây:
    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. Ch?y đo?n m? SQL sau bên trong isql. Nó nên đư?c thành công và chèn m?t hàng vào bài ki?m tra b?ng, 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. G?i cho các th? t?c đư?c lưu tr? cùng m?t t? m?t ?ng d?ng ODBC b?ng cách s? d?ng đo?n m? m?u sau. Cùng m?t l?i c?ng có th? đư?c sao chép b?ng cách s? d?ng công c? ODBC th? nghi?m b?ng cách g?i các ch?c năng đư?c hi?n th? trong tr?nh t? gi?ng.
    	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. K?t qu? bư?c ? trên nhà nư?c SQL 22018 và "k? t? không h?p l? giá tr? cho đ?c đi?m k? thu?t di?n viên" tin nh?n v?i m?t m? tr? l?i c?a SQL_SUCCESS_WITH_INFO. Sau đây là m?t m?u ODBC water đăng nh?p:
    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) 
    					

Thu?c tính

ID c?a bài: 269011 - L?n xem xét sau cùng: 22 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
T? khóa: 
kbbug kbdatabase kbpending kbmt KB269011 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:269011

Cung cấp Phản hồi