Array
(
)

Lixo em mensagem RAISERROR - help!

Tiagoharris
   - 09 set 2004

Olá pessoal, o meu problema é o seguinte:

Em um determinado ponto de uma Stored Procedure, há uma condição, que caso seja verdadeira, lanço uma mensagem. O código segue abaixo:

IF (COALESCE(@Valor_Multa,0) <> COALESCE(@Multa_original, 0))
BEGIN
SELECT @Msg = ´Não é possível alterar a multa de um documento de baixa parcial (´ + @Old_Shopping + ´/´ + @Old_Codigo_do_Documento + ´).´ + char(13) + char(10) + ´ Ela deve ser incluida no momento da criacao da parcela.´
RAISERROR ( @Msg, 16, 1 )
RETURN 0
END

O problema é que quando eu rodo a aplicação no Delphi, no cadastro em questão ao qual se aplica essa stored procedure, o Delphi lança a excessão, com a mensagem que eu escrevi na stored procedure acima. Mas a mensagem não aparece inteira, aparece com lixo no final.
A mensagem aparece assim:

Não é possível alterar a multa de um documento de baixa parcial (RDB /BP20040303).
Ela deve ser incluida no momento
daÀ(quadradinho)

A mensagem aparece exatamente dessa forma.

Como posso fazer pra resolver esse problema?

Obrigado,

Tiago.

Aroldo Zanela
   - 16 set 2004

Colega,

Como foi declarada @msg? Abaixo um teste que efetuei por aqui e não apresentou problemas. Usei Delphi 6, SQL 2000 e ADO:

#Código

CREATE PROCEDURE [USP_Teste] AS
declare @mensagem as VarChar(1000)
set @mensagem = ´Nao é possível alterar a multa de um documento de baixa parcial. (000/000000000)´+char(10)+char(13)+´Ela deve ser incluida no momento da criacao da parcela´
RAISERROR ( @mensagem, 16, 1 ) 
RETURN

GO


Tiagoharris
   - 16 set 2004

está declarado assim:

...
Declare
@Msgvarchar(500),
(mais outras variáveis)