我需要知道使用更改跟踪在数据库中更改了哪些表。是否有任何表格可以在其中找到带有提交 ID 的最后更新的表格?我可以使用select * from CHANGETABLE(CHANGES taitemnames,25262)ct order by sys_change_version desc
,但这需要我为每个表运行一次以检查更改。
问问题
4595 次
2 回答
0
我不熟悉此功能,但如果您的问题是如何使用查询多个表,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 中的一个结合起来,将结果写入一个表中,然后查询该表以进行报告和分析。
于 2012-11-15T22:51:15.023 回答
0
尝试sys.CHANGE_TRACKING_TABLES
(在 MSDN 上记录)。
您必须使用OBJECT_NAME
从第一列获取表名。
于 2014-05-28T22:19:51.153 回答