Quando uma API de ODBC funcionar como chamadas SQLExecute um procedimento armazenado que tem uma chamada para sp_getbindtoken ou que é accionado um accionador que tenha uma chamada para sp_getbindtoken , poderá ver a seguinte mensagem de erro:
DIAG [22018] [Microsoft] [ODBC SQL Server controlador] valor de carácter inválido para especificação de conversão (0)
SQLExecute devolve SQL_SUCCESS_WITH_INFO mas comunica o erro acima.
Este erro ocorre apenas com o SQL Server 6.5, incluindo Service Packs 1 através de 5a. Este erro não ocorre quando o procedimento armazenado é chamado a partir isql ou tiver sem parâmetros de saída.
Quando chamado a partir de uma aplicação de ODBC, a execução do procedimento armazenado devolve um valor devolvido indicando êxito, mas gera este erro e não passar novamente os parâmetros de saída. A chamada de API de ODBC SQLExecute devolve SQL_SUCCESS_WITH_INFO e a mensagem de erro acima.
Passos para reproduzir o comportamento
Criar uma tabela, um procedimento armazenado e um accionador na base de dados Pubs utilizando o seguinte script de 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
Execute o seguinte script SQL dentro de isql . Deverá ser bem sucedido e inserir uma linha na tabela de teste, 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
Chamar o procedimento armazenado mesmo a partir de uma aplicação de ODBC utilizando o seguinte código de exemplo. Também pode ser reproduzido o mesmo erro utilizando a ferramenta ODBC teste chamando as funções mostradas na mesma sequência.
O passo acima resulta no estado SQL 22018 e mensagem de "valor de carácter inválido para especificação de conversão" com um código de retorno de SQL_SUCCESS_WITH_INFO. Segue-se um registo de rastreio ODBC do exemplo:
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)
Artigo: 269011 - Última revisão: terça-feira, 5 de Junho de 2007 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
Microsoft SQL Server 6.5 Standard Edition
Microsoft Data Access Components 2.1
Microsoft Data Access Components 2.5
Palavras-chave:
kbmt kbbug kbdatabase kbpending KB269011 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 269011
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.