创建函数

适用于:Microsoft Fabric 中的 SQL 分析终结点和仓库

CREATE FUNCTION 可以创建内联表值函数和标量函数。

注意

标量 UDF 是 Fabric 数据仓库中的预览功能。

重要

在 Fabric 数据仓库中, 标量 UDF 必须可内联 用于 SELECT ... FROM 用户表的查询,但仍然可以创建不可内联的函数。 在有限数量的方案中无法内联工作的标量 UDF。 可以检查 是否可以内联 UDF

用户定义函数是接受参数、执行操作(例如复杂计算)并将操作结果以值的形式返回的 Transact-SQL 例程。 标量函数返回标量值,例如数字或字符串。 用户定义的表值函数 (TVF) 返回表。

用于 CREATE FUNCTION 创建可使用以下方式使用的可重用 T-SQL 例程:

  • 在 Transact-SQL 语句中,例如 SELECT
  • 在 Transact-SQL 数据作语句(例如 UPDATEINSERT和) DELETE
  • 在调用该函数的应用程序中
  • 在另一个用户定义函数的定义中
  • 用于替换存储过程

小窍门

如果一个名称不存在或更改现有函数,则可以指定 CREATE OR ALTER FUNCTION 在单个语句中创建新函数。

Transact-SQL 语法约定

语法

标量函数语法

CREATE FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
  ]  
)  
RETURNS return_data_type  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    BEGIN   
        function_body   
        RETURN scalar_expression  
    END  
[ ; ]  

<function_option>::=   
{  
    [ SCHEMABINDING ]  
  | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]  
}  

内联表值函数语法

CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] parameter_data_type
    [ = default ] }
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH SCHEMABINDING ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

参数

schema_name

用户定义函数所属的架构的名称。

function_name

用户定义的函数的名称。 函数名称必须符合标识符规则,并且在数据库中以及对其架构来说是唯一的。

注意

即使未指定参数,函数名称后也需要加上括号。

@parameter_name

用户定义函数中的参数。 可声明一个或多个参数。

一个函数最多可以有 2,100 个参数。 执行函数时,如果未定义参数的默认值,则用户必须提供每个已声明参数的值。

通过将 at 符号 (@) 用作第一个字符来指定参数名称。 参数名称必须符合标识符规则。 参数是对应于函数的局部参数;其他函数中可使用相同的参数名称。 参数只能代替常量,而不能用于代替表名、列名或其他数据库对象的名称。

注意

ANSI_WARNINGS 在存储过程、用户定义的函数中传递参数或在批处理语句中声明和设置变量时,不遵循此条件。 例如,如果将一个变量定义为 char(3),然后将其值设置为大于三个字符,则数据会被截断为定义的大小,并且 INSERT 或 UPDATE 语句可以成功执行。

parameter_data_type

参数数据类型。 对于 Transact-SQL 函数,允许 所有标量数据类型

[ = 默认 ]

参数的默认值。 如果定义了 default 值,则无需指定此参数的值即可执行函数。

当函数的参数具有默认值时,必须在调用函数以检索默认值时指定关键字 DEFAULT 。 此行为与在存储过程中使用具有默认值的参数不同,在后一种情况下,不提供参数同样意味着使用默认值。

return_data_type

标量用户定义函数的返回值。

对于 Fabric 数据仓库中的函数,除 rowversion/时间戳外,允许所有数据类型。 不允许 使用表 等非标类型。

function_body

一系列 Transact-SQL 语句。

在标量函数中, function_body 是一系列 Transact-SQL 语句,它们共同计算为标量值,其中包括:

  • 单语句表达式
  • 多语句表达式(IF/THEN/ELSEBEGIN/END 块)
  • 局部变量
  • 对可用的内置 SQL 函数的调用
  • 调用其他 UDF
  • SELECT 语句和对表、视图和内联表值函数的引用

scalar_expression

指定标量函数返回的标量值。

select_stmt

定义内联表值函数的返回值的单个 SELECT 语句。 对于内联表值函数,没有函数体;表是单个 SELECT 语句的结果集。

表格

指定表值函数 (TVF) 的返回值为表。 只有常量和 @local_variables 可以传递到 TVF。

在内联 TVF(预览版)中,TABLE 返回值通过单个 SELECT 语句定义。 内联函数没有关联的返回变量。

<function_option>

在 Fabric 数据仓库中,不支持 / > 和 关键字。

支持的函数选项包括:

SCHEMABINDING

指定将函数绑定到其引用的数据库对象。 如果指定了 SCHEMABINDING,则不能按照将影响函数定义的方式修改基对象。 必须首先修改或删除函数定义本身,才能删除将要修改的对象的依赖关系。

只有发生下列操作之一时,才会删除函数与其引用对象的绑定:

  • 删除函数。

  • 在未指定 SCHEMABINDING 选项的情况下,使用 ALTER 语句修改函数。

只有满足以下条件时,函数才能绑定到架构:

  • 该函数引用的任何用户定义函数也绑定到架构。

  • 函数引用的对象使用由两部分组成的名称进行引用。

  • UDF 的正文中只能引用同一数据库中的内置函数和其他 UDF。

  • 执行 CREATE FUNCTION 该语句的用户对函数引用的数据库对象具有 REFERENCES 权限。

若要删除 SCHEMABINDING,请使用 ALTER

RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT

指定 OnNULLCall 标量值函数的属性。 如果未指定, CALLED ON NULL INPUT 则默认为隐含,即使作为参数传递,函数正文也会执行 NULL

最佳做法

  • 如果未使用架构绑定创建用户定义的函数,则对基础对象所做的更改可能会影响函数的定义,并在调用函数时产生意外结果。 建议在创建函数时指定 WITH SCHEMABINDING 子句。 这确保除非也修改了函数,否则无法修改在函数定义中引用的对象。

  • 编写要内联的用户定义函数。 有关详细信息,请参阅标量 UDF 内联

互操作性

内联表值用户定义函数

在内联表值函数中,只允许使用单个 select 语句。

标量用户定义函数

  • 下列语句在标量值函数中有效:

    • 赋值语句
    • Control-of-Flow 语句(语句除外)TRY...CATCH
    • DECLARE 定义本地数据变量的语句
  • 标量值函数正文不支持以下内置函数:

  • 在以下情况下,不能在用户表的查询中使用 SELECT ... FROM 标量 UDF:

  • 在以下情况下,无法在查询中使用标量 UDF:

  • 不支持递归标量 UDF。

  • 如果在单个查询中调用超过 10 个 UDF,则用户查询可能会失败。

  • 在某些情况下,用户查询和 UDF 正文的复杂性会阻止内联,在这种情况下,标量 UDF 未内联,并且用户查询失败。

  • 在任何不受支持的方案中使用标量 UDF 时,会看到错误消息“Scalar UDF execution is currently unavailable in this context.

限制

注意

在当前预览期间,限制可能会更改。

用户定义函数不能用于执行修改数据库状态的操作。

用户定义函数可以嵌套;也就是说,用户定义函数可相互调用。 被调用函数开始执行时,嵌套级别将增加;被调用函数执行结束后,嵌套级别将减少。 当 UDF 正文引用表/视图/内联表值函数或最多 32 个级别时,Fabric 数据仓库中的用户定义的函数最多可以嵌套四个级别。 超过嵌套的最大级别会导致调用函数链失败。

元数据

本部分列出可用于返回与用户定义函数有关的元数据的系统目录视图。

  • sys.sql_modules:显示 Transact-SQL 用户定义函数的定义。 例如:

    SELECT definition, type   
    FROM sys.sql_modules AS m  
    JOIN sys.objects AS o   
        ON m.object_id = o.object_id   
        AND type = ('FN');
    
  • sys.parameters:显示有关用户定义的函数中定义的参数的信息。

  • sys.sql_expression_dependencies:显示函数引用的基础对象。

权限

Fabric 工作区管理员、成员和参与者角色的成员可以创建函数。

标量 UDF 内联

Microsoft Fabric 数据仓库使用 标量 UDF 内联 以分布式方式编译和执行用户定义的代码。 默认情况下启用标量 UDF 内联。

虽然标量 UDF 内联是首先在 sql Server 2019(15.0)Microsoft引入的性能优化技术,但在 Fabric 数据仓库中,它确定受支持的方案集。 在 Fabric 数据仓库中,标量 UDF 会自动转换为在调用查询中替换的标量表达式或标量子查询来代替 UDF 运算符。

某些 T-SQL 语法使标量 UDF 不可内联。 不能内联包含 WHILE 循环、多个 RETURN 语句或对非确定性 SQL 内置函数(如 GETUTCDATE()GETDATE())的调用的函数。 有关详细信息,请参阅 标量 UDF 内联要求

检查是否可以内联标量 UDF

目录 sys.sql_modules 视图包括该列,该列 is_inlineable指示 UDF 是否可内联。

is_inlineable 属性派生自检查 UDF 定义中的语法。 编译时之前,标量 UDF 不会内联。 一 1 个值指示 UDF 是内联的,而值 0 指示它不可内联。 如果标量 UDF 可内联,则不能保证在编译查询时始终内联。

Fabric 数据仓库根据总体查询复杂性决定是否内联 UDF(每个查询)。

使用以下示例查询检查标量 UDF 是否可内联:

SELECT 
SCHEMA_NAME(b.schema_id) as function_schema_name,
    b.name as function_name,
       b.type_desc as function_type,
       a.is_inlineable
FROM sys.sql_modules AS a
     INNER JOIN sys.objects AS b
         ON a.object_id = b.object_id
WHERE b.type IN ('FN');

如果标量函数不可内联 sys.sql_modules.is_inlineable,仍可将查询作为独立调用执行,例如设置变量。 但是标量函数不能是用户表上的查询的一 SELECT ... FROM 部分。 例如:

CREATE FUNCTION [dbo].[custom_SYSUTCDATETIME]()
  RETURNS datetime2(6)
  AS
  BEGIN
   RETURN SYSUTCDATETIME();
  END

由于使用不确定的系统函数,示例 dbo.custom_SYSUTCDATETIME 标量用户定义函数 SYSUTCDATETIME()不可内联。 它在用户表的查询中使用 SELECT ... FROM 时会失败,但作为独立调用成功,例如:

DECLARE @utcdate datetime2(7);
SET @utcdate = dbo.custom_SYSUTCDATETIME();
SELECT @utcdate as 'utc_date';

例子

答: 创建内联表值函数

下面的示例创建一个内联表值函数,以返回按 objectType 参数筛选的模块的某些关键信息。 它包含一个默认值,用于在使用参数调用 DEFAULT 函数时返回所有模块。 此示例使用元数据中提到的一些系统目录视图。

CREATE FUNCTION dbo.ModulesByType (@objectType CHAR(2) = '%%')
RETURNS TABLE
AS
RETURN (
        SELECT sm.object_id AS 'Object Id',
            o.create_date AS 'Date Created',
            OBJECT_NAME(sm.object_id) AS 'Name',
            o.type AS 'Type',
            o.type_desc AS 'Type Description',
            sm.DEFINITION AS 'Module Description',
            sm.is_inlineable AS 'Inlineable'
        FROM sys.sql_modules AS sm
        INNER JOIN sys.objects AS o ON sm.object_id = o.object_id
        WHERE o.type LIKE '%' + @objectType + '%'
        );
GO

然后,可以调用该函数以返回所有内联表值函数(IF)以及:

SELECT * FROM dbo.ModulesByType('IF'); -- SQL_INLINE_TABLE_VALUED_FUNCTION

或者,查找所有标量函数(FN):

SELECT * FROM dbo.ModulesByType('FN'); -- SQL_SCALAR_FUNCTION

B. 合并内联表值函数的结果

这个简单的示例使用以前创建的内联 TVF 来演示如何使用 CROSS APPLY 将其结果与其他表合并。 在这里,我们将从这两个sys.objects列中选择所有列,并为列上type匹配的所有行的结果ModulesByType。 有关使用 apply 的详细信息,请参阅 FROM 子句和 JOIN、APPLY、PIVOT(Transact-SQL)

SELECT * 
FROM sys.objects AS o
CROSS APPLY dbo.ModulesByType(o.type);
GO

C. 创建标量 UDF 函数

以下示例创建一个可嵌入标量 UDF,用于屏蔽输入文本。

CREATE OR ALTER FUNCTION [dbo].[cleanInput] (@InputString VARCHAR(100))
    RETURNS VARCHAR(50)
    AS
    BEGIN
        DECLARE @Result VARCHAR(50)
        DECLARE @CleanedInput VARCHAR(50)

        -- Trim whitespace
        SET @CleanedInput = LTRIM(RTRIM(@InputString))

        -- Handle empty or null input
        IF @CleanedInput = '' OR @CleanedInput IS NULL
        BEGIN
            SET @Result = ''
        END
        ELSE IF LEN(@CleanedInput) <= 2
        BEGIN
            -- If string length is 1 or 2, just return the cleaned string
            SET @Result = @CleanedInput
        END
        ELSE
        BEGIN
            -- Construct the masked string
            SET @Result = 
                LEFT(@CleanedInput, 1) +
                REPLICATE('*', LEN(@CleanedInput) - 2) +
                RIGHT(@CleanedInput, 1)
        END

        RETURN @Result
    END

可以调用如下所示的函数:

DECLARE @input varchar(100) = '123456789'

SELECT dbo.cleanInput (@input) AS function_output;

有关如何在 Fabric 数据仓库中使用标量 UDF 的更多示例:

SELECT在语句中:

SELECT TOP 10 
t.id, t.name, 
dbo.cleanInput (t.name) AS function_output
FROM dbo.MyTable AS t;

WHERE在子句中:

 SELECT t.id, t.name, dbo.cleanInput(t.name) AS function_output
FROM dbo.MyTable AS t
WHERE dbo.cleanInput(t.name)='myvalue'

JOIN在子句中:

SELECT t1.id, t1.name, 
     dbo.cleanInput (t1.name) AS function_output, 
     dbo.cleanInput (t2.name) AS function_output_2
FROM dbo.MyTable1 AS t1
    INNER JOIN dbo.MyTable2 AS t2 
        ON dbo.cleanInput(t1.name)=dbo.cleanInput(t2.name);

ORDER BY在子句中:

SELECT  t.id, t.name, dbo.cleanInput (t.name) AS function_output
FROM dbo.MyTable AS t
ORDER BY function_output;

在数据作语言(DML)语句中,例如 INSERTUPDATEDELETE

SELECT t.id, t.name, dbo.cleanInput (t.name) AS function_output 
INTO dbo.MyTable_new
FROM dbo.MyTable AS t;

UPDATE t
SET t.mycolumn_new = dbo.cleanInput (t.name)
FROM dbo.MyTable AS t;

DELETE t
FROM dbo.MyTable AS t
WHERE dbo.cleanInput (t.name) ='myvalue';

适用于:Azure Synapse Analytics分析平台系统 (PDW)

在 Azure Synapse Analytics 或 Analytics 平台系统(PDW)中创建用户定义的函数(UDF)。 用户定义函数是接受参数、执行操作(例如复杂计算)并将操作结果以值的形式返回的 Transact-SQL 例程。 用户定义表值函数 (TVF) 返回 table 数据类型。

  • 在 Analytics Platform System (PDW) 中,返回值必须是标量(单个)值。

  • 在 Azure Synapse Analytics 中, CREATE FUNCTION 可以使用内联表值函数(预览)的语法返回表,也可以通过使用标量函数的语法返回单个值。

  • 在 Azure Synapse Analytics 中的无服务器 SQL 池中,可以创建内联表值函数, CREATE FUNCTION 但不能创建标量函数。

    使用此语句可以创建可通过以下方式使用的重复使用的例程:

  • 在 Transact-SQL 语句中,例如 SELECT

  • 在调用该函数的应用程序中

  • 在另一个用户定义函数的定义中

  • 用于为列定义 CHECK 约束

  • 用于替换存储过程

  • 使用内联函数作为安全策略的筛选器谓词

小窍门

有关 Fabric 数据仓库中的语法,请参阅 Microsoft Fabric 数据仓库的 CREATE FUNCTION 版本。

Transact-SQL 语法约定

语法

标量函数语法

-- Transact-SQL Scalar Function Syntax (in dedicated pools in Azure Synapse Analytics and Parallel Data Warehouse)
-- Not available in the serverless SQL pools in Azure Synapse Analytics

CREATE FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
  ]  
)  
RETURNS return_data_type  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    BEGIN   
        function_body   
        RETURN scalar_expression  
    END  
[ ; ]  

<function_option>::=   
{  
    [ SCHEMABINDING ]  
  | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]  
}  

内联表值函数语法

-- Transact-SQL Inline Table-Valued Function Syntax
-- Preview in dedicated SQL pools in Azure Synapse Analytics
-- Available in the serverless SQL pools in Azure Synapse Analytics
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] parameter_data_type
    [ = default ] }
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH SCHEMABINDING ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

参数

schema_name

用户定义函数所属的架构的名称。

function_name

用户定义的函数的名称。 函数名称必须符合标识符规则,并且在数据库中以及对其架构来说是唯一的。

注意

即使未指定参数,函数名称后也需要加上括号。

@parameter_name

用户定义函数中的参数。 可声明一个或多个参数。

一个函数最多可以有 2,100 个参数。 执行函数时,如果未定义参数的默认值,则用户必须提供每个已声明参数的值。

通过将 at 符号 (@) 用作第一个字符来指定参数名称。 参数名称必须符合标识符规则。 参数是对应于函数的局部参数;其他函数中可使用相同的参数名称。 参数只能代替常量,而不能用于代替表名、列名或其他数据库对象的名称。

注意

ANSI_WARNINGS 在存储过程、用户定义的函数中传递参数或在批处理语句中声明和设置变量时,不遵循此条件。 例如,如果将一个变量定义为 char(3),然后将其值设置为大于三个字符,则数据会被截断为定义的大小,并且 INSERT 或 UPDATE 语句可以成功执行。

parameter_data_type

参数数据类型。 对于 Transact-SQL 函数,允许在 Azure Synapse Analytics 中支持所有标量数据类型。 不支持 timestamp (rowversion) 数据类型。

[ = 默认 ]

参数的默认值。 如果定义了 default 值,则无需指定此参数的值即可执行函数。

如果函数的参数有默认值,则调用该函数以检索默认值时,必须指定关键字 DEFAULT。 此行为与在存储过程中使用具有默认值的参数不同,在后一种情况下,不提供参数同样意味着使用默认值。

return_data_type

标量用户定义函数的返回值。 对于 Transact-SQL 函数,允许在 Azure Synapse Analytics 中支持所有标量数据类型。 rowversion/时间戳数据类型不是受支持的类型。 不允许光标和表的非标量类型。

function_body

Transact-SQL 语句系列。 function_body不能包含SELECT语句,也不能引用数据库数据。 function_body不能引用表或视图。 function body 可以调用其他确定性的函数但不能调用不确定性函数。

在标量函数中,function_body 是一系列 Transact-SQL 语句,这些语句一起使用可计算出标量值。

scalar_expression

指定标量函数返回的标量值。

select_stmt

定义内联表值函数的返回值的单个 SELECT 语句。 对于内联表值函数,没有函数体;表是单个 SELECT 语句的结果集。

表格

指定表值函数 (TVF) 的返回值为表。 只有常量和 @local_variables 可以传递到 TVF。

在内联 TVF(预览版)中,TABLE 返回值通过单个 SELECT 语句定义。 内联函数没有关联的返回变量。

<function_option>

指定函数具有以下一个或多个选项。

SCHEMABINDING

指定将函数绑定到其引用的数据库对象。 如果指定了 SCHEMABINDING,则不能按照将影响函数定义的方式修改基对象。 必须首先修改或删除函数定义本身,才能删除将要修改的对象的依赖关系。

只有发生下列操作之一时,才会删除函数与其引用对象的绑定:

  • 删除函数。

  • 在未指定 SCHEMABINDING 选项的情况下,使用 ALTER 语句修改函数。

只有满足以下条件时,函数才能绑定到架构:

  • 该函数引用的任何用户定义函数也绑定到架构。

  • 使用由一个部分或两个部分组成的名称引用该函数和由该函数引用的其他 UDF。

  • UDF 的正文中只能引用同一数据库中的内置函数和其他 UDF。

  • 执行 CREATE FUNCTION 该语句的用户对函数引用的数据库对象具有 REFERENCES 权限。

若要删除 SCHEMABINDING,请使用 ALTER

RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT

指定 OnNULLCall 标量值函数的属性。 如果未指定, CALLED ON NULL INPUT 则默认为隐含,即使作为参数传递,函数正文也会执行 NULL

最佳做法

如果用户定义函数不是使用 SCHEMABINDING 子句创建的,则对基础对象进行的任何更改可能会影响函数定义并在调用函数时可能导致意外结果。 建议在创建函数时指定 WITH SCHEMABINDING 子句。 这确保除非也修改了函数,否则无法修改在函数定义中引用的对象。

互操作性

下列语句在标量值函数中有效:

  • 赋值语句。

  • TRY...CATCH 语句以外的流控制语句。

  • 定义本地数据变量的 DECLARE 语句。

在内联表值函数(预览)中,只允许使用单个 SELECT 语句。

限制

用户定义函数不能用于执行修改数据库状态的操作。

用户定义函数可以嵌套;也就是说,用户定义函数可相互调用。 被调用函数开始执行时,嵌套级别将增加;被调用函数执行结束后,嵌套级别将减少。 如果超出最大嵌套级别数,整个调用函数链将失败。 在 Microsoft Fabric 数据仓库中,用户定义函数最多可嵌套五个级别。

无法在 Azure Synapse Analytics 的无服务器 SQL 池的 master 数据库中创建对象(包括函数)。

元数据

本部分列出可用于返回与用户定义函数有关的元数据的系统目录视图。

  • sys.sql_modules:显示 Transact-SQL 用户定义函数的定义。 例如:

    SELECT definition, type   
    FROM sys.sql_modules AS m  
    JOIN sys.objects AS o   
        ON m.object_id = o.object_id   
        AND type = ('FN');
    
  • sys.parameters:显示有关用户定义的函数中定义的参数的信息。

  • sys.sql_expression_dependencies:显示函数引用的基础对象。

权限

需要在数据库中具有 CREATE FUNCTION 权限,并对创建函数时所在的架构具有 ALTER 权限。

例子

答: 使用标量值用户定义函数更改数据类型

此简单函数将 int 数据类型作为输入,并返回 decimal(10,2) 数据类型作为输入 。

CREATE FUNCTION dbo.ConvertInput (@MyValueIn int)  
RETURNS decimal(10,2)  
AS  
BEGIN
    DECLARE @MyValueOut int;  
    SET @MyValueOut= CAST( @MyValueIn AS decimal(10,2));  
    RETURN(@MyValueOut);  
END;  
GO  

SELECT dbo.ConvertInput(15) AS 'ConvertedValue';  

注意

无服务器 SQL 池中不提供标量函数。

B. 创建内联表值函数

下面的示例创建一个内联表值函数,以返回按 objectType 参数筛选的模块的某些关键信息。 它包含一个默认值,用于在使用参数调用 DEFAULT 函数时返回所有模块。 此示例使用元数据中提到的一些系统目录视图。

CREATE FUNCTION dbo.ModulesByType(@objectType CHAR(2) = '%%')
RETURNS TABLE
AS
RETURN
(
    SELECT 
        sm.object_id AS 'Object Id',
        o.create_date AS 'Date Created',
        OBJECT_NAME(sm.object_id) AS 'Name',
        o.type AS 'Type',
        o.type_desc AS 'Type Description', 
        sm.definition AS 'Module Description'
    FROM sys.sql_modules AS sm  
    JOIN sys.objects AS o ON sm.object_id = o.object_id
    WHERE o.type like '%' + @objectType + '%'
);
GO

然后,可以调用该函数以返回所有视图 (V) 对象,其中包含:

select * from dbo.ModulesByType('V');

注意

内联表值函数在无服务器 SQL 池中可用,但在专用表 SQL 池中是预览版。

C. 合并内联表值函数的结果

这个简单的示例使用以前创建的内联 TVF 来演示如何使用 CROSS APPLY 将其结果与其他表合并。 在这里,我们将从这两个sys.objects列中选择所有列,并为列上type匹配的所有行的结果ModulesByType。 有关使用 apply 的详细信息,请参阅 FROM 子句和 JOIN、APPLY、PIVOT(Transact-SQL)

SELECT * 
FROM sys.objects o
CROSS APPLY dbo.ModulesByType(o.type);
GO

注意

内联表值函数在无服务器 SQL 池中可用,但在专用表 SQL 池中是预览版。

下一步