T-SQL 선택 컬렉션 데이터베이스에 있는 모든 테이블과 각 테이블의 체크섬 목록(바이너리 체크섬 (*)
질문:
집합 데이터베이스에 있는 모든 표를 열거하고 각 표를 열거해야 한다CHECKSUM_AGG(BINARY_CHECKSUM(*))
.나는 내가
sp_tables
로 모든 표를 열거할 수 있다는 것을 알고 있지만, 어떻게 그것을 CHECKSUM_AGG(BINARY_CHECKSUM(*))
와 함께 끝의 추가 열로 사용할 수 있습니까?답안
가능할 것 같지만 테이블이 많은 대형 데이터베이스에서 얼마나 오래 걸릴지 모릅니다.if object_id('tempdb..#Tables') is not null
drop table #Tables;
select row_number() over (order by (select null)) as RowNum
,t.table_catalog as TableQualifier
,t.table_schema as TableOwner
,t.table_name as TableName
,case t.table_type
when 'base table'
then 'table'
else t.table_type
end as TableType
,null as TableChecksum
into #Tables
from information_schema.tables t
where t.table_type <> 'view';
declare @RowNum int;
declare @TableName nvarchar(100);
declare @TableChecksum bigint;
declare @SQL nvarchar(max);
while (select count(1) from #Tables where TableChecksum is null) > 0
begin
select top 1 @RowNum = RowNum
,@TableName = TableName
,@SQL = 'select @TableChecksum = checksum_agg(binary_checksum(*)) from ' + @TableName
from #Tables
where TableChecksum is null;
exec sp_executesql @SQL
,N'@TableChecksum bigint output'
,@TableChecksum output;
update #Tables
set TableChecksum = @TableChecksum
where RowNum = @RowNum;
end;
select *
from #Tables;
if object_id('tempdb..#Tables') is not null
drop table #Tables;