sql >> Databasteknik >  >> RDS >> Sqlserver

Använder CHANGETABLE() på alla tabeller

Jag är inte bekant med den här funktionen, men om ditt problem är hur du söker efter flera tabeller med CHANGETABLE() då antar jag att du kan använda en lagrad procedur för att loopa över alla tabellnamn och köra frågan med dynamisk 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

Du kan kombinera detta med en INSERT i dynamisk SQL för att skriva in resultaten i en tabell som du sedan frågar efter för rapportering och analys.



  1. MySQL:välja den närmaste matchningen?

  2. Returnera en lista över tabeller och vyer i SQL Server med T-SQL (sp_tables)

  3. Lagra och hämta .ZIP-fil i SQL SERVER 2005

  4. Postgres stänger anslutningen under fråga efter några hundra sekunder när Psycopg2 används