sql >> Base de Datos >  >> RDS >> Sqlserver

Usando CHANGETABLE() en todas las tablas

No estoy familiarizado con esta función, pero si su problema es cómo consultar varias tablas usando CHANGETABLE() entonces supongo que podría usar un procedimiento almacenado para recorrer todos los nombres de las tablas y ejecutar la consulta usando SQL dinámico:

declare 
    @sql nvarchar(max), 
    @parameters nvarchar(max), 
    @TableName nvarchar(128), 
    @Version bigint

set @Version = CHANGE_TRACKING_CURRENT_VERSION()

declare Tables cursor local fast_forward
for 
select name from sys.tables where... -- add conditions here if necessary

open Tables
fetch next from Tables into @TableName
while @@fetch_status = 0
begin
    set @sql = N'select * from CHANGETABLE(CHANGES ' + quotename(@TableName) + ', @LastVersion)ct order by sys_change_version desc'
    set @parameters = N'@LastVersion bigint'
    exec sp_executesql @sql, @parameters, @LastVersion = @Version
    fetch next from Tables into @TableName
end

close Tables
deallocate Tables

Podrías combinar esto con un INSERT en el SQL dinámico para escribir los resultados en una tabla que luego consulta para informes y análisis.