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.
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
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
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
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.
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)
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