Estou tentando criar uma função envolvendo change_tracking_min_valid_version(object_id), para simplificar as consultas ao usar sinônimos em vez de nomes de tabelas. Algo assim:
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
Tentei obter o nome do objeto base separadamente, para poder descartar a parte selecionada da instrução de retorno, ou seja
set @retval = CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(@table_name))
MS SQL Server Management Studio produz este erro:
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.
Eu entendo que não posso usar operações com efeitos colaterais em funções, mas como não consigo encontrar nenhuma informação sobre (ou entender por que haveria algum) efeitos colaterais dessa função específica, minha pergunta é:
Quais são os efeitos colaterais de CHANGE_TRACKING_MIN_VALID_VERSION?
(Estou usando o SQL Server 2012.)