Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwendung von CHANGETABLE() für alle Tabellen

Ich bin mit dieser Funktion nicht vertraut, aber wenn Ihr Problem darin besteht, mehrere Tabellen mit CHANGETABLE() abzufragen dann nehme ich an, dass Sie eine gespeicherte Prozedur verwenden könnten, um alle Tabellennamen zu durchlaufen und die Abfrage mit dynamischem SQL auszuführen:

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

Sie könnten dies mit einem INSERT kombinieren in der dynamischen SQL, um die Ergebnisse in eine Tabelle zu schreiben, die Sie dann für Berichte und Analysen abfragen.