You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中能否在内联表值函数中调用用户自定义标量函数?

问题解答:SQL Server内联表值函数是否支持调用用户自定义标量函数

结论是完全支持,这属于SQL Server原生支持的语法,没有强制使用限制。

语法示例

首先创建测试用自定义标量函数:

-- 示例标量函数:计算商品对应税费
CREATE FUNCTION dbo.CalculateTax(@Price DECIMAL(10,2), @TaxRate DECIMAL(5,2))
RETURNS DECIMAL(10,2)
AS
BEGIN
    RETURN @Price * @TaxRate / 100
END

再创建调用上述标量函数的内联表值函数:

-- 示例内联表值函数,内部直接调用自定义标量函数
CREATE FUNCTION dbo.GetProductPricing(@CategoryId INT, @TaxRate DECIMAL(5,2))
RETURNS TABLE 
AS
RETURN
(
    SELECT 
        ProductId,
        ProductName,
        Price,
        dbo.CalculateTax(Price, @TaxRate) AS TaxAmount, -- 调用自定义标量函数
        Price + dbo.CalculateTax(Price, @TaxRate) AS FinalPrice
    FROM Products
    WHERE CategoryId = @CategoryId
)

注意事项

  • 性能风险:SQL Server 2017及更早版本,自定义标量函数默认不会被查询优化器内联展开,会逐行调用执行,会大幅降低内联表值函数的查询效率,数据量大时性能衰减尤其明显。
  • 新版本优化:SQL Server 2019及以上版本,将数据库兼容级别设置为150及以上后,符合内联条件的标量函数会被自动展开,不会产生额外性能开销。
  • 若要最大化查询性能,建议优先把标量函数的逻辑直接写在内联表值函数的查询语句中,避免不必要的函数嵌套。

内容的提问来源于stack exchange,提问作者Chirag Patelia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:30:05