Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на CHANGETABLE() на всички таблици

Не съм запознат с тази функция, но ако проблемът ви е как да правите заявки за множество таблици с помощта на CHANGETABLE() тогава предполагам, че бихте могли да използвате съхранена процедура, за да преминете през всички имена на таблици и да изпълните заявката с помощта на динамичен 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

Можете да комбинирате това с INSERT в динамичния SQL, за да запишете резултатите в таблица, която след това да заявите за отчитане и анализ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 GET DATETIMEOFFSET според настройките на машината

  2. SQL Server JOIN липсва NULL стойности

  3. Как да поправя грешката „Доставчик на име Pipes, грешка 40 – Не можах да отворя връзка към „SQL Server“?

  4. Случвало ли ви се е SQL Server 2008 да върне различен набор от резултати от SQL Server 2000?

  5. Нуждаете се от по-добро решение за премахване на специални знаци и числа