Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisation de CHANGETABLE() sur toutes les tables

Je ne connais pas cette fonctionnalité, mais si votre problème est de savoir comment interroger plusieurs tables à l'aide de CHANGETABLE() alors je suppose que vous pouvez utiliser une procédure stockée pour boucler sur tous les noms de table et exécuter la requête en utilisant SQL dynamique :

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

Vous pouvez combiner ceci avec un INSERT dans le SQL dynamique pour écrire les résultats dans une table que vous interrogez ensuite à des fins de création de rapports et d'analyse.