sql >> Databáze >  >> RDS >> Sqlserver

Použití CHANGETABLE() na všech tabulkách

Neznám tuto funkci, ale pokud je váš problém s dotazem na více tabulek pomocí CHANGETABLE() pak předpokládám, že byste mohli použít uloženou proceduru k smyčkování všech názvů tabulek a spuštění dotazu pomocí dynamického SQL:

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

Můžete to zkombinovat s INSERT v dynamickém SQL zapsat výsledky do tabulky, kterou poté dotazujete pro vytváření sestav a analýzu.



  1. Jak aktualizovat na kaskádě v MySQL?

  2. Načítání seskupení z tabulek many-to-many

  3. Jak omezit nebo upřednostnit dotaz v MySql

  4. Jak vybrat jeden řádek náhodně s ohledem na váhu?