内联功能与常规选择

时间:2018-12-19 16:01:32

标签: sql-server-2012 table-valued-parameters

现在,我正在研究SQL Server 2012中的函数。我知道有三种函数类型。但是我对Inline Table-Value Functions感到困惑。

让我解释一下。

select * into Number 
from (
 values 
  (1, 'A'),(2, 'B'),(3, 'C')
) number (N, C)

create function InlineFun (@i int)
returns table
as
return (select * from Number where n = @i)

select * from Number where n = 1
select * from InlineFun (1)

从以上select的结果是相同的。那么Inline TVF ..的确切范围是什么?

注意:

我正在使用Microsoft SQL Server 2012

1 个答案:

答案 0 :(得分:1)

ITVF视为view,您可以将参数传递给该参数。它实际上包含在引用它的脚本中,就好像它是普通的旧SQL然后执行一样。这就是为什么它们比必须执行为独立语句的多语句表值函数更好的原因。

由于这个原因,在您的示例中,语句如下:

select *
from InlineFun (1)

基本上是通过以下方式传递给查询引擎的:

select *
from (select *
      from Number
      where n = 1
     ) as a

因此,要真正回答您的问题,该函数的范围与调用它的语句的范围相同。