Olá SBOneans...
por favor, dedique um tempo e esclareça.
em 14 de novembro, fiz uma pergunta sobre a atualização do UDT, perguntando como e com quais valores atualizar os campos padrão 'Code' e 'Name' do UDT. Embora não tenha recebido respostas satisfatórias, através de um pouco de tentativa e erro, encontrei uma solução alternativa para o mesmo.
mas agora, estou enfrentando problemas ao tentar atualizar o UDT [dbo].[@BinStock] de um loop de busca de cursor. Abaixo está a parte relevante de toda a minha consulta.
/* início da consulta */
delete [dbo].[@BinStock]
/* muitos códigos que criam outras tabelas temporárias são criados aqui */
CREATE TABLE #tStBin
(
Wh_code VARCHAR(8),
Item_code VARCHAR(18),
St_bin VARCHAR(8),
qty MONEY
)
/*
#mStBin criado apenas para fins de teste/depuração. Não sei sobre o Tipo e Tamanho dos campos padrão do sistema 'Code' e 'Name' no UDT [dbo].[@BinStock], mas, o restante dos campos são iguais aos definidos no UDT [dbo].[@BinStock]
*/
CREATE TABLE #mStBin
(
code varchar(10),
name varchar(20),
Wh_code VARCHAR(8),
Item_code VARCHAR(18),
St_bin VARCHAR(8),
qty MONEY
/* #mStBin criado apenas para fins de teste/depuração */
DECLARE @tWhcode VARCHAR(8),
@tItemcode VARCHAR(18),
@tStbin VARCHAR(8),
@tqty MONEY,
@trecno int
/* muitos códigos que preenchem a tabela temporária #tStBin são criados aqui */
DECLARE cur1 CURSOR FOR
select T0.Wh_code, T0.Item_code, T0.St_Bin, sum(T0.qty)
FROM #tStBin T0
group by T0.Wh_code, T0.Item_code, T0.St_Bin
OPEN cur1
FETCH NEXT FROM cur1 INTO @tWhcode, @tItemcode, @tstbin, @tqty
set @trecno = 0
WHILE (@@fetch_status = 0)
BEGIN
set @trecno = @trecno + 1
/* no momento em que a próxima declaração de inserção é introduzida, o sistema lança um erro */
insert into [dbo].[@BinStock] (code, name, U_Wh_Code, U_Item_code, U_St_Bin, U_Qty_Bal)
values (@trecno, 'Rec#'+cast(@trecno as varchar(5)), @tWhCode, @tItemCode, @tStBin, @tqty)
/* na declaração de inserção anterior, se [dbo].[@BinStock] for substituído por #mStBin, a consulta funciona sem problemas! */
FETCH NEXT FROM cur1 INTO @tWhcode, @tItemcode, @tstbin, @tqty
END
CLOSE cur1
DEALLOCATE cur1
drop table #tStBin, #mStBin
/* fim da consulta */
embora inserir registros na tabela temporária #mStBin com a mesma declaração de inserção não cause problemas, tentar inserir registros no UDT [dbo].[@BinStock] com essa declaração de inserção resulta em um erro. mas, não conheço o erro exato, pois o sistema exibe a mensagem de erro anterior encontrada e corrigida!
outro problema irritante são as mensagens de erro que o sistema nos lança, realmente são confusas e enganosas, e na maioria das vezes parecem mostrar a mensagem de erro anterior em vez da real!
há algum problema ao inserir/atualizar UDTs dentro de um cursor? como podemos fazer isso?
por favor, dedique um tempo e esclareça.
Obrigado e Cumprimentos,
Raghu Iyer