2011-08-11 9 views
1

J'ai une procédure stockée qui doit faire une jointure interne sur une fonction qui retourne une table. Essayer de l'appeler comme ceci:Procédure stockée rejoignant une fonction de table?

INNER JOIN [dbo].[udf_GetBillingInfo(@QuoteID)] billInfo ON quotes.QuoteID = billInfo.QuoteID 

donne une erreur invalid object name dbo.udf_GetBillingInfo(@QuoteID)

Étant donné mes besoins, je ne pense pas que je peux faire fonctionner en vue car il a un peu mineur de la logique en elle. Comment puis-je rejoindre le résultat? Devrais-je affecter le résultat de la fonction à une variable ou quelque chose de cette nature?

+1

vous devriez pouvoir joindre à un TVF. -vous que le schéma et le nom de tvf sont corrects? –

Répondre

5

Votre problème est les crochets - [dbo].[udf_GetBillingInfo(@QuoteID)] - ils citent tout ce qui est à l'intérieur comme le nom de la fonction.

Modifier à ceci:

[dbo].udf_GetBillingInfo(@QuoteID) 
+0

Hah, c'était ça; J'ai oublié que [] indique un nom de colonne **, donc il pensait le nom de la fonction * et * le paramètre était une colonne. Failz. –

+0

ou [dbo]. [Udf_GetBillingInfo] (@ QuoteID) – canon

+0

D'oh! Je ne peux pas croire que j'ai manqué celui-là! +1 –

-1

Pouvez-vous écrire votre fonction en tant que fonction de table? Je pense que vous pouvez trouver la réponse ici

tsql returning a table from a function or store procedure

+1

ce n'est pas la réponse à la question. (Pas mon downvote btw) –

+0

En effet. Après avoir relu la question que je vois, vous avez dit que c'était une fonction de table. –

0

Voici un (muet) exemple de se joindre à un TVF, espérons qu'il aide!

CREATE FUNCTION MyFunc (@p1 int) RETURNS TABLE 
AS 
RETURN 
(
     SELECT @p1 AS a 
     union 
     SELECT @p1 +1 AS a 
     union 
     SELECT @p1 +2 AS a 
) 
GO 

declare @t table (c int) 
insert @t (c) values(1),(2),(3),(4) 

select * 
from @t t 
left join dbo.MyFunc(1) f on t.c = f.a 
Questions connexes