Array
(
)

problema com Stored Procedure

Ara.es
   - 29 mai 2006

tenho essa store procedure:

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

ALTER PROCEDURE SP_RENUMERA_MOVIMENTOS AS
BEGIN

DECLARE @TESTE CURSOR
DECLARE @CHAVE INT
DECLARE @REG INT

SET @TESTE = CURSOR FORWARD_ONLY STATIC FOR
SELECT CD_MOVIMENTO FROM ALM_MOVIMENTOS
ORDER BY ANO_EXERCICIO, DT_MOVIMENTO, SB_TIPO_MOVIMENTO

SELECT @REG=0

OPEN @TESTE
FETCH NEXT FROM @TESTE INTO @CHAVE
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @REG = @REG+1
UPDATE ALM_MOVIMENTOS
SET ST_DOC_MOVIMENTO=REPLICATE(´0´,9-LEN(@REG))+CONVERT(VARCHAR(9),@REG)
WHERE CD_MOVIMENTO=@CHAVE
FETCH NEXT FROM @TESTE INTO @CHAVE
END

CLOSE @TESTE
DEALLOCATE @TESTE
END

SELECT * FROM ALM_MOVIMENTOS

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

que serve para renumerar a tabela de movimentos, so q tenho um problema minha tabela possui uma coluna ano_exercicio, e tbm um campo q recebe a data do movimento, gostaria que ele renumerasse mais por ano por exemplo, a cada novo ano ele rretorna ao movimento ´0000001´ ai havendo mudança de ano ele novmente retorna pra ´000001´.. assim por diante

Wcrivelini
   - 06 jun 2006

Confesso que eu estranhei a sintaxe q vc usa pra declarar o cursor, mas vamos lá.

Listei só que acrescenta ao código existente e eu nao testei :)

declare @ANOANTERIOR INT
declare @ANOEXERCICIO INT
......

--altere seu cursor pra listar também o ANO_EXERCICIO
DECLARE TESTE CURSOR FOR
SELECT CD_MOVIMENTO, ANO_EXERCICIO
FROM ALM_MOVIMENTOS
ORDER BY ANO_EXERCICIO, DT_MOVIMENTO, SB_TIPO_MOVIMENTO

-- naturalmente, o FETCH muda tb pra capturar as duas variáveis
OPEN TESTE

FETCH NEXT FROM TESTE INTO @CHAVE, @ANOEXERCICIO

SET @ANOANTERIOR = 0

WHILE .......
BEGIN

IF @ANOANTERIOR < @ANOEXERCICIO
SET @REG = 0

..................

SET @ANOANTERIOR = ANO_EXERCICIO
END

Ara.es
   - 08 jun 2006

Valeu wcrivelini, irei verificar se funciona aki obrigado..