sql >> Databasteknik >  >> RDS >> Sqlserver

tsql returnerar en tabell från en funktion eller lagringsprocedur

Du kan inte komma åt tillfälliga tabeller från en SQL-funktion. Du kommer att behöva använda tabellvariabler så huvudsakligen:

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

Redigera

Baserat på kommentarer till denna fråga är här min rekommendation. Du vill sammanfoga resultaten av antingen en procedur eller tabellvärderad funktion i en annan fråga. Jag kommer att visa dig hur du kan göra det och sedan väljer du den du föredrar. Jag kommer att använda exempelkod från ett av mina scheman, men du borde kunna anpassa det. Båda är genomförbara lösningar först med en lagrad procedur.

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

I det här fallet måste du deklarera en temporär tabell eller tabellvariabel för att lagra resultaten av proceduren. Låt oss nu titta på hur du skulle göra detta om du använde en UDF

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

Som du kan se är UDF mycket mer kortfattat lättare att läsa och presterar förmodligen lite bättre eftersom du inte använder den sekundära temporära tabellen (prestanda är en fullständig gissning från min sida).

Om du ska återanvända din funktion/procedur på många andra ställen, tror jag att UDF är ditt bästa val. Den enda haken är att du måste sluta använda #Temp-tabeller och använda tabellvariabler. Om du inte indexerar din temptabell bör det inte vara några problem, och du kommer att använda tempDb mindre eftersom tabellvariabler hålls i minnet.



  1. Datumtyp utan tid i Oracle

  2. Hur hittar du diskstorleken för en Postgres / PostgreSQL-tabell och dess index

  3. CHECK-klausulen för uppdateringsbara vyer

  4. Vad är databaser?