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

如何在SQL Server自定义函数中使用CHANGE_TRACKING_CURRENT_VERSION?

解决SQL Server自定义函数无法调用CHANGE_TRACKING_CURRENT_VERSION()的问题

SQL Server的标量函数不允许调用CHANGE_TRACKING_CURRENT_VERSION()这类带有副作用的系统函数,这就是你遇到报错的原因。以下是几种可行的替代方案:

方案1:改用存储过程

存储过程不受函数的副作用限制,直接创建存储过程返回版本号:

CREATE PROCEDURE dbo.GetChangeVersion
AS
BEGIN
    SELECT CHANGE_TRACKING_CURRENT_VERSION() AS CurrentVersion;
END

在Entity Framework中,你可以通过FromSqlRaw或者专门的存储过程调用API获取这个值。

方案2:使用视图替代函数

创建一个仅返回当前变更版本的视图:

CREATE VIEW dbo.vw_ChangeTrackingCurrentVersion
AS
SELECT CHANGE_TRACKING_CURRENT_VERSION() AS CurrentVersion;

之后在EF里查询这个视图即可,和查询普通实体的方式一致。

方案3:在EF中直接映射系统函数

无需自定义SQL函数,直接在DbContext中映射系统函数:
在你的DbContext类中添加如下方法,并标注[DbFunction]特性:

[DbFunction("CHANGE_TRACKING_CURRENT_VERSION", "dbo")]
public static long? ChangeTrackingCurrentVersion()
{
    throw new NotSupportedException("此方法仅用于LINQ查询翻译,不可直接调用");
}

之后就能在LINQ查询里直接使用这个方法,EF会自动将其转换为对应的SQL系统函数调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:22:34