Eu tenho uma função definida pelo usuário:
create function ut_FooFunc(@fooID bigint, @anotherParam tinyint)
returns @tbl Table (Field1 int, Field2 varchar(100))
as
begin
-- blah blah
end
Agora eu quero juntar isso em outra tabela, assim:
select f.ID, f.Desc, u.Field1, u.Field2
from Foo f
join ut_FooFunc(f.ID, 1) u -- doesn't work
where f.SomeCriterion = 1
Em outras palavras, para todos os Foo
registros onde SomeCriterion
é 1, quero ver o Foo
ID
and Desc
, juntamente com os valores de Field1
e Field2
que são retornados ut_FooFunc
para uma entrada de Foo.ID
.
Qual é a sintaxe para fazer isso?
Você
CROSS APPLY
não precisa participar.A definição das expressões de tabela envolvidas nas junções deve ser estável. Ou seja, eles não podem ser correlacionados de tal forma que a expressão da tabela signifique algo diferente dependendo do valor de uma linha em outra tabela.
Sei que o tópico é antigo, me fizeram a mesma pergunta, fiz um teste, o resultado é o seguinte...
O tempo de execução é...
Se eu usar a resposta sugerida da seguinte forma ...
O tempo de execução e a contagem de resultados são...
O que vejo aqui é que a consulta interna traz um conjunto mais correto de resultados e o tempo de execução é muito mais eficiente. Corrija-me com a melhor abordagem para realizar o mesmo!