小编Grz*_*Łyp的帖子

如何控制启动谓词在执行计划中的位置

对于下面代码的最后两个语句,生成实际的执行计划。您可以看到启动谓词 on@Par1被放置在不同的位置,这完全改变了来自test_fn1函数的实际行数。我需要控制这种行为。

create or alter function dbo.test_fn1(@Par1 varchar(100), @Par2 varchar(1))
returns @t table(item varchar(100))
as
begin
  insert into @t (item) select value from STRING_SPLIT(@Par1, @Par2);
  return
end
GO
create or alter function dbo.test_fn(@Par1 varchar(100), @Par2 varchar(100))
returns table
as
return (
  select s.*
    from dbo.test_fn1(@Par2,';') x
    inner join sys.objects s on s.name = x.item
    where @Par1 = 'CASE1'
)
GO
create or alter function dbo.test_fnx(@Par1 varchar(100), @Par2 
   varchar(100))
returns table
as
return (
  select s.*
    from …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan startup sql-server-2016

5
推荐指数
1
解决办法
277
查看次数