sql >> Database >  >> RDS >> Sqlserver

Hoe een tabelvariabele van een functie (UDF) retourneren?

Je gebruikt geen DECLARE bij het retourneren van een tabelvariabele. Definieer de resultatentabel in de RETURNS clausule.

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

Bijwerken

Hoe zit het met het retourneren van het eindresultaat in een opgeslagen 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
    )

Bijwerken

Probeer dit. Maak een tabelvariabele in de UDF om de resultaten van de eerste selectie op te slaan en voeg vervolgens het resultaat van de laatste query in de retourwaarde in.

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



  1. Tijdreeksgegevens efficiënt opslaan:mySQL of platte bestanden? Veel tabellen (of bestanden) of queries met de WHERE-voorwaarde?

  2. Hoe selecteer ik een <select> statement uit de database?

  3. Is het een goed idee om MySQL en Neo4j samen te gebruiken?

  4. Mysql - vind een tabel in alle databases