使用另一个数据库中的更改跟踪功能

Sea*_*nOB 5 sql-server change-tracking

如果我在名为 Production 的数据库上打开更改跟踪,是否可以使用这些函数从另一个数据库获取更改数据?

例如: CHANGE_TRACKING_CURRENT_VERSION();

我尝试了以下方法,并尝试用 替换模式,sys但我认为这种方法不起作用:

Use [Analysis]
GO
SELECT Production.dbo.CHANGE_TRACKING_CURRENT_VERSION() 
Run Code Online (Sandbox Code Playgroud)

我通过在 Production 上创建一个调用这个函数的存储过程来解决这个问题。然后我可以从该 SQL Server 上的其他数据库调用该存储过程。但是想知道是否有更直接的方法。

我正在尝试将数据从一个系统迁移到另一个系统(在一两周内,然后关闭旧系统)。在另一个数据库上启用了更改跟踪。我受 SQL Server 版本限制,CDC 需要 Enterprise、Developer 或 Evaluation。

Mar*_*ith 6

CHANGE_TRACKING_CURRENT_VERSION是一个内置函数而不是 UDF,所以Production.dbo.CHANGE_TRACKING_CURRENT_VERSION()是不允许的。

它不接受任何参数来指定数据库。

我会想象以下任何一种都会起作用。

第一个调用Production.sys.sp_executesql并执行该函数。第二个调用sys.sp_executesql当前数据库并添加显式USE语句来设置上下文。我还没有设置更改跟踪和明确测试,但两种方法都按需要工作DB_NAME()

DECLARE @CHANGE_TRACKING_CURRENT_VERSION BIGINT;

EXEC Production.sys.sp_executesql
  N'SELECT @ReturnValue = CHANGE_TRACKING_CURRENT_VERSION()',
  N'@ReturnValue BIGINT OUTPUT',
  @ReturnValue = @CHANGE_TRACKING_CURRENT_VERSION OUTPUT

SELECT @CHANGE_TRACKING_CURRENT_VERSION
Run Code Online (Sandbox Code Playgroud)
DECLARE @CHANGE_TRACKING_CURRENT_VERSION BIGINT;

EXEC sys.sp_executesql
  N'USE Production;
    SELECT @ReturnValue = CHANGE_TRACKING_CURRENT_VERSION()',
  N'@ReturnValue BIGINT OUTPUT',
  @ReturnValue = @CHANGE_TRACKING_CURRENT_VERSION OUTPUT

SELECT @CHANGE_TRACKING_CURRENT_VERSION 
Run Code Online (Sandbox Code Playgroud)