Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да върна таблична променлива от функция (UDF)?

Не използвате DECLARE при връщане на таблична променлива. Дефинирайте таблицата с резултати в RETURNS клауза.

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

Актуализация

Какво ще кажете за връщане на крайния резултат в съхранена процедура?

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
    )

Актуализация

Опитайте тази. Създайте таблична променлива в UDF, за да съхранявате резултатите от първото избиране, след което вмъкнете резултата от последната заявка в върнатата стойност.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:как да попитам кога е направено последното резервно копие на регистъра на транзакциите?

  2. SWITCHOFFSET() Примери в SQL Server

  3. Получаване на номер на седмица от дата в MS SQL Server 2005?

  4. SQL Server 2008 и милисекунди

  5. Изследване на опциите за изчакване на заключване с нисък приоритет в SQL Server 2014 CTP1