微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 2019:在视图中内联UDF

如何解决SQL Server 2019:在视图中内联UDF

我想测试sql Server 2019的新功能-内联UDF函数。当我在简单的SELECT中调用函数时,它似乎运行良好。但是,如果该函数包含在视图中,则不会执行内联。

我有一个简单的标量函数

CREATE FUNCTION [dbo].[GetEmployeeFullName](@id INT) RETURNS NVARCHAR(100) AS
BEGIN
    DECLARE @ret NVARCHAR(100);

    SELECT @ret = FirstName + ' ' + LastName
    FROM Employee
    WHERE EmployeeId = @id;

    RETURN @ret;
END

调用函数的视图:

CREATE VIEW QEmployee AS
SELECT EmployeeId,dbo.GetEmployeeFullName(EmployeeId) AS FullName,FirstName,LastName,Street,City,ZipCode,EMail,Phone
FROM Employee

如果仅运行SELECT:

SELECT EmployeeId,Phone
FROM Employee

内联函数

Query plan of SELECT over the base table

但是,如果我在视图上运行SELECT:

SELECT * FROM QEmployee

内联不再完成:

Query plan of SELECT over the view

我在表中插入了10万条记录。第一种情况(内联完成时)的查询处理时间约为。 1s,而在第二种情况下,超过3s。谁能解释我,为什么在第二种情况下sql Server不内联函数?我希望两种情况下的查询计划都应该完全相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。