我正在尝试创建一个包装 change_tracking_min_valid_version(object_id) 的函数,以在使用同义词而不是表名时简化查询。像这样的东西:
CREATE FUNCTION MY_CHANGE_TRACKING_MIN_VALID_VERSION(@synonym VARCHAR(100))
RETURNS BIGINT
BEGIN
RETURN (SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(base_object_name))
FROM sys.synonyms WHERE name = @synonym);
END
我已经尝试单独获取基础对象名称,以便能够删除返回语句的选择部分,即
set @retval = CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(@table_name))
MS SQL Server Management Studio 产生此错误:
Msg 443, Level 16, State 1, Procedure MY_CHANGE_TRACKING_MIN_VALID_VERSION, Line 5
Invalid use of a side-effecting operator 'change_tracking_min_valid_version' within a function.
我确实知道我不能在函数中使用带有副作用的操作,但是由于我似乎无法找到有关(或理解为什么会有任何)此特定函数的副作用的任何信息,所以我的问题是:
CHANGE_TRACKING_MIN_VALID_VERSION 的副作用是什么?
(我使用的是 SQL Server 2012。)