sql >> Databáze >  >> RDS >> Sqlserver

tsql vrací tabulku z funkce nebo procedury úložiště

K dočasným tabulkám nemůžete přistupovat z funkce SQL. Proměnné tabulky budete muset používat v podstatě takto:

ALTER FUNCTION FnGetCompanyIdWithCategories()
RETURNS  @rtnTable TABLE 
(
    -- columns returned by the function
    ID UNIQUEIDENTIFIER NOT NULL,
    Name nvarchar(255) NOT NULL
)
AS
BEGIN
DECLARE @TempTable table (id uniqueidentifier, name nvarchar(255)....)

insert into @myTable 
select from your stuff

--This select returns data
insert into @rtnTable
SELECT ID, name FROM @mytable 
return
END

Upravit

Na základě komentářů k této otázce zde je moje doporučení. Chcete spojit výsledky procedury nebo funkce s hodnotou tabulky v jiném dotazu. Ukážu vám, jak to můžete udělat, pak si vyberte ten, který se vám líbí. Budu používat ukázkový kód z jednoho z mých schémat, ale měli byste být schopni jej přizpůsobit. Oba jsou životaschopná řešení nejprve s uloženou procedurou.

declare @table as table (id int, name nvarchar(50),templateid int,account nvarchar(50))

insert into @table
execute industry_getall

select * 
from @table 
inner join [user] 
    on account=[user].loginname

V tomto případě musíte deklarovat dočasnou tabulku nebo proměnnou tabulky pro uložení výsledků procedury. Nyní se podívejme, jak byste to udělali, kdybyste používali UDF

select *
from fn_Industry_GetAll()
inner join [user] 
    on account=[user].loginname

Jak můžete vidět, UDF je mnohem stručnější, snadněji se čte a pravděpodobně funguje o něco lépe, protože nepoužíváte sekundární dočasnou tabulku (výkon je z mé strany úplný odhad).

Pokud budete znovu používat svou funkci/postup na mnoha jiných místech, myslím, že UDF je vaše nejlepší volba. Jediný háček je, že budete muset přestat používat tabulky #Temp a používat proměnné tabulky. Pokud neindexujete svou dočasnou tabulku, neměl by nastat žádný problém a tempDb budete používat méně, protože proměnné tabulky jsou uchovávány v paměti.



  1. nvarchar(max) vs NText

  2. Jak vypočítat druhou odmocninu v SQL

  3. Jak automatizovat sběr dat při růstu databáze SQL Server

  4. Neo4j - Pusťte index pomocí Cypher