我有一个用户定义的功能:
create function ut_FooFunc(@fooID bigint, @anotherParam tinyint)
returns @tbl Table (Field1 int, Field2 varchar(100))
as
begin
-- blah blah
end
现在我想在另一张桌子上加入这个,像这样:
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
换句话说,对于所有为 1 的Foo
记录SomeCriterion
,我想查看Foo
ID
和Desc
,以及为 的输入返回的Field1
和的值。Field2
ut_FooFunc
Foo.ID
这样做的语法是什么?
你不需要
CROSS APPLY
加入。连接中涉及的表表达式的定义必须是稳定的。即它们不能相互关联,因此表表达式的含义取决于另一个表中行的值而有所不同。
我知道线程很旧,我被问到同样的问题,我做了一个测试,结果如下......
执行时间是...
如果我使用以下建议的答案...
执行时间和结果计数是...
我在这里看到的是内部查询带来了更正确的结果集,并且执行时间更加高效。请用更好的方法纠正我以完成同样的事情!