Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como retornar uma variável de tabela de uma função (UDF)?


Você não usa DECLARE ao retornar uma variável de tabela. Defina a tabela de resultados no RETURNS cláusula.
CREATE Function GetFinancials ()
RETURNS @financials TABLE
(
  [a bunch of variable declarations in here]
)
AS
BEGIN
    insert into @Financials
    [big old SELECT query here - this all works fine, and populates @Financials]

    RETURN
END

Atualizar


Que tal retornar o resultado final em um procedimento armazenado?
create procedure uspGetFinanicals
as
  declare @financial table
  (
    [table definition here]
  )

  insert into @financial
  select dbo.GetFinancials()

  select * 
    from @Financials f1
    where f1.TransactionDate = (
        select MAX(TransactionDate)
        from @Financials
        where SalesDocumentItemID = f1.SalesDocumentItemID
    )

Atualizar


Tente isso. Crie uma variável de tabela dentro da UDF para armazenar os resultados da primeira seleção e insira o resultado da consulta final no valor de retorno.
CREATE Function GetFinancials ()
RETURNS @financials TABLE
(
  [a bunch of variable declarations in here]
)
AS
BEGIN
    declare @table table([a bunch of variable declarations in here])
    insert into @table
    [big old SELECT query here - this all works fine, and populates @Financials]

    insert into @Financials
    select * 
      from @table f1
      where f1.TransactionDate = (
        select MAX(TransactionDate)
        from @table
        where SalesDocumentItemID = f1.SalesDocumentItemID
      )

    RETURN
END