Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używanie CHANGETABLE() na wszystkich stołach

Nie znam tej funkcji, ale jeśli masz problem z zapytaniem o wiele tabel za pomocą CHANGETABLE() wtedy zakładam, że możesz użyć procedury składowanej, aby zapętlić wszystkie nazwy tabel i uruchomić zapytanie za pomocą dynamicznego 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

Możesz połączyć to z INSERT w dynamicznym SQL, aby zapisać wyniki w tabeli, do której następnie wysyłasz zapytania w celu raportowania i analizy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać lub upuścić kolumnę za pomocą graficznego interfejsu użytkownika w SQL Server — samouczek SQL Server / T-SQL, część 39

  2. Jak ORDER BY w SQL PIVOT

  3. Zmiana nazwy bazy danych SQL

  4. Jak zrobić zapytanie z group_concat na serwerze sql

  5. Operator ampersand (&) w SQL Server klauzula WHERE