Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich eine Tabellenvariable von einer Funktion (UDF) zurückgeben?

Sie verwenden DECLARE nicht bei der Rückgabe einer Tabellenvariablen. Definieren Sie die Ergebnistabelle in RETURNS Klausel.

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

Aktualisieren

Wie wäre es mit der Rückgabe des Endergebnisses in einer gespeicherten Prozedur?

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
    )

Aktualisieren

Versuche dies. Erstellen Sie eine Tabellenvariable innerhalb der UDF, um die Ergebnisse der ersten Auswahl zu speichern, und fügen Sie dann das Ergebnis der letzten Abfrage in den Rückgabewert ein.

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