Usuário com melhor resposta
problema em criar function de retorno

Pergunta
-
Ola pessoal.
Bom, estou tentando criar uma function recursiva mais esta dando erro alguém poderia me ajudar
CREATE FUNCTION dbo.fnGetUltimoIdMovFinanceiroByidMovFinan
(
@idMovFinan int
)
WITH CTEMovimentoFinanceiro(idMovFinan,idProxMovFinan,Nivel)
AS
(
-- Ancora
SELECT IdMovFinanceiro,idProxMovFinan,0 AS 'Nivel'
FROM MovimentoFinanceiro
WHERE IdMovFinanceiro = @idMovFinan
UNION ALL
-- Parte RECURSIVA
SELECT M.idMovFinanceiro,M.IdProxMovFinan,CTE.Nivel + 1 AS 'Nivel'
FROM MovimentoFinanceiro M
INNER JOIN CTEMovimentoFinanceiro CTE ON M.IdMovFinanceiro = CTE.idProxMovFinan
)
SELECT Nivel,idMovFinan,idProxMovFinan
FROM CTEMovimentoFinanceiro
where idProxMovFinan is null
return
GO
Respostas
-
Cara muito obrigado pela colaboração, mais conseguir fazer o que precisava que era
CREATE FUNCTION dbo.fnGetUltimoIdMovFinanceiroByidMovFinan
(
@idMovFinan int
)
RETURNS INT
BEGIN
DECLARE @idMovFinanRetorno INT;//declarar
WITH CTEMovimentoFinanceiro(idMovFinan,idProxMovFinan,Nivel)
AS
(
-- Ancora
SELECT IdMovFinanceiro,idProxMovFinan,0 AS 'Nivel'
FROM MovimentoFinanceiro
WHERE IdMovFinanceiro = @idMovFinan
UNION ALL
-- Parte RECURSIVA
SELECT M.idMovFinanceiro,M.IdProxMovFinan,CTE.Nivel + 1 AS 'Nivel'
FROM MovimentoFinanceiro M
INNER JOIN CTEMovimentoFinanceiro CTE ON M.IdMovFinanceiro = CTE.idProxMovFinan
)
--Variável de Retorno
SELECT @idMovFinanRetorno = idMovFinan FROM CTEMovimentoFinanceiro WHERE idProxMovFinan IS NULL
RETURN (@idMovFinanRetorno)// e retornar
END
GOmuito obrigado pela atenção
- Marcado como Resposta Antonio.lima terça-feira, 12 de maio de 2015 14:01
Todas as Respostas
-
Bom dia,
Não sei se entendi corretamente o resultado que você deseja obter, mas experimente:
CREATE FUNCTION dbo.fnGetUltimoIdMovFinanceiroByidMovFinan ( @idMovFinan int ) RETURNS @MovimentoFinanceiro TABLE ( Nivel int, IdMovFinanceiro int, IdProxMovFinan int ) AS BEGIN WITH CTEMovimentoFinanceiro(idMovFinan,idProxMovFinan,Nivel) AS ( -- Ancora SELECT IdMovFinanceiro,idProxMovFinan,0 AS 'Nivel' FROM MovimentoFinanceiro WHERE IdMovFinanceiro = @idMovFinan UNION ALL -- Parte RECURSIVA SELECT M.idMovFinanceiro,M.IdProxMovFinan,CTE.Nivel + 1 AS 'Nivel' FROM MovimentoFinanceiro M INNER JOIN CTEMovimentoFinanceiro CTE ON M.IdMovFinanceiro = CTE.idProxMovFinan ) INSERT INTO @MovimentoFinanceiro (Nivel, IdMovFinanceiro, IdProxMovFinan) SELECT Nivel, idMovFinanceiro, idProxMovFinan FROM CTEMovimentoFinanceiro where idProxMovFinan is null return; END;
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
Cara muito obrigado pela colaboração, mais conseguir fazer o que precisava que era
CREATE FUNCTION dbo.fnGetUltimoIdMovFinanceiroByidMovFinan
(
@idMovFinan int
)
RETURNS INT
BEGIN
DECLARE @idMovFinanRetorno INT;//declarar
WITH CTEMovimentoFinanceiro(idMovFinan,idProxMovFinan,Nivel)
AS
(
-- Ancora
SELECT IdMovFinanceiro,idProxMovFinan,0 AS 'Nivel'
FROM MovimentoFinanceiro
WHERE IdMovFinanceiro = @idMovFinan
UNION ALL
-- Parte RECURSIVA
SELECT M.idMovFinanceiro,M.IdProxMovFinan,CTE.Nivel + 1 AS 'Nivel'
FROM MovimentoFinanceiro M
INNER JOIN CTEMovimentoFinanceiro CTE ON M.IdMovFinanceiro = CTE.idProxMovFinan
)
--Variável de Retorno
SELECT @idMovFinanRetorno = idMovFinan FROM CTEMovimentoFinanceiro WHERE idProxMovFinan IS NULL
RETURN (@idMovFinanRetorno)// e retornar
END
GOmuito obrigado pela atenção
- Marcado como Resposta Antonio.lima terça-feira, 12 de maio de 2015 14:01