Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come restituire una variabile di tabella da una funzione (UDF)?

Non usi DECLARE quando si restituisce una variabile di tabella. Definisci la tabella dei risultati in RETURNS clausola.

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

Aggiorna

Che ne dici di restituire il risultato finale in una stored procedure?

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
    )

Aggiorna

Prova questo. Crea una variabile di tabella all'interno dell'UDF per memorizzare i risultati della prima selezione, quindi inserisci il risultato della query finale nel valore restituito.

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