problema com Stored Procedure
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
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
Ara.es
Curtidas 0
Respostas
Wcrivelini
29/05/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
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
GOSTEI 0
Ara.es
29/05/2006
Valeu wcrivelini, irei verificar se funciona aki obrigado..
GOSTEI 0