Vous ne pouvez pas accéder aux tables temporaires à partir d'une fonction SQL. Vous devrez utiliser des variables de table donc essentiellement :
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
Modifier
Sur la base des commentaires à cette question, voici ma recommandation. Vous souhaitez joindre les résultats d'une procédure ou d'une fonction table dans une autre requête. Je vais vous montrer comment vous pouvez le faire, puis vous choisissez celui que vous préférez. Je vais utiliser un exemple de code de l'un de mes schémas, mais vous devriez pouvoir l'adapter. Les deux sont des solutions viables d'abord avec une procédure stockée.
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
Dans ce cas, vous devez déclarer une table temporaire ou une variable de table pour stocker les résultats de la procédure. Voyons maintenant comment vous feriez cela si vous utilisiez une UDF
select *
from fn_Industry_GetAll()
inner join [user]
on account=[user].loginname
Comme vous pouvez le voir, l'UDF est beaucoup plus concis, plus facile à lire et fonctionne probablement un peu mieux puisque vous n'utilisez pas la table temporaire secondaire (les performances sont une supposition complète de ma part).
Si vous allez réutiliser votre fonction/procédure dans de nombreux autres endroits, je pense que l'UDF est votre meilleur choix. Le seul problème est que vous devrez arrêter d'utiliser les tables #Temp et utiliser des variables de table. À moins que vous n'indexiez votre table temporaire, il ne devrait y avoir aucun problème et vous utiliserez moins tempDb puisque les variables de table sont conservées en mémoire.