Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment retourner une variable de table à partir d'une fonction (UDF) ?

Vous n'utilisez pas DECLARE lors du retour d'une variable de table. Définissez le tableau de résultat dans le RETURNS clause.

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

Mettre à jour

Que diriez-vous de renvoyer le résultat final dans une procédure stockée ?

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
    )

Mettre à jour

Essaye ça. Créez une variable de table dans l'UDF pour stocker les résultats de la première sélection, puis insérez le résultat de la requête finale dans la valeur de retour.

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