Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Quando uma API ODBC funcionar como chamadas SQLExecute um procedimento armazenado que tem uma chamada para sp_getbindtoken ou que aciona um disparador que tenha uma chamada para sp_getbindtoken , você verá a seguinte mensagem de erro:
DIAG [22018] [Microsoft] [ODBC SQL Server Driver] valor de caractere inválido para especificação de conversão (0)
SQLExecute retorna SQL_SUCCESS_WITH_INFO, mas relata o erro acima.
Este erro ocorre apenas com SQL Server 6.5, inclusive Service Packs 1 através de 5a. Este erro não ocorre quando o procedimento armazenado é chamado de isql ou não tem nenhum parâmetro de saída.
Quando chamado de um aplicativo ODBC, a execução do procedimento armazenado retorna um valor de retorno indicando êxito, mas ele gera este erro e não passa novamente os parâmetros de saída. A chamada de API ODBC SQLExecute retorna SQL_SUCCESS_WITH_INFO e a mensagem de erro acima.
Criar uma tabela, um procedimento armazenado e um disparador no banco de dados Pubs usando o seguinte script 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 isql . Ele deve ser bem-sucedida 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
Chame o mesmo procedimento armazenado de um aplicativo ODBC usando o seguinte código de exemplo. O mesmo erro também pode ser reproduzido usando a ferramenta teste ODBC chamando as funções mostradas na mesma seqüência.
A etapa acima resulta no estado SQL 22018 e a mensagem "valor de caractere inválido para especificação de conversão" com um código de retorno de SQL_SUCCESS_WITH_INFO. Este é um log de rastreamento ODBC 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)
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 269011
(http://support.microsoft.com/kb/269011/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.