usp_update_CI_stats_before_cloning.sql 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. SET NOCOUNT ON
  2. Use <source database to be cloned>
  3. go
  4. --IF EXISTS(select * from sys.databases where name='db2')
  5. --ALTER DATABASE db2 set single_user with rollback immediate;
  6. --DROP DATABASE db2;
  7. declare @out table(id int identity(1,1),s sysname, o sysname, i sysname, stats_stream varbinary(max), rows bigint, pages bigint)
  8. declare @dbcc table(stats_stream varbinary(max), rows bigint, pages bigint)
  9. declare c cursor for
  10. select object_schema_name(object_id) s, object_name(object_id) o, name i
  11. from sys.indexes
  12. where type_desc in ('CLUSTERED COLUMNSTORE', 'NONCLUSTERED COLUMNSTORE')
  13. declare @s sysname, @o sysname, @i sysname
  14. open c
  15. fetch next from c into @s, @o, @i
  16. while @@FETCH_STATUS = 0 begin
  17. declare @showStats nvarchar(max) = N'DBCC SHOW_STATISTICS("' + quotename(@s) + '.' + quotename(@o) + '", ' + quotename(@i) + ') with stats_stream'
  18. insert @dbcc exec sp_executesql @showStats
  19. insert @out select @s, @o, @i, stats_stream, rows, pages from @dbcc
  20. delete @dbcc
  21. fetch next from c into @s, @o, @i
  22. end
  23. close c
  24. deallocate c
  25. declare @sql nvarchar(max);
  26. declare @id int;
  27. select top 1 @id=id,@sql=
  28. 'UPDATE STATISTICS ' + quotename(s) + '.' + quotename(o) + '(' + quotename(i)
  29. + ') with stats_stream = ' + convert(nvarchar(max), stats_stream, 1)
  30. + ', rowcount = ' + convert(nvarchar(max), rows) + ', pagecount = ' + convert(nvarchar(max), pages)
  31. from @out
  32. WHILE (@@ROWCOUNT <> 0)
  33. BEGIN
  34. exec sp_executesql @sql
  35. delete @out where id = @id
  36. select top 1 @id=id,@sql=
  37. 'UPDATE STATISTICS ' + quotename(s) + '.' + quotename(o) + '(' + quotename(i)
  38. + ') with stats_stream = ' + convert(nvarchar(max), stats_stream, 1)
  39. + ', rowcount = ' + convert(nvarchar(max), rows) + ', pagecount = ' + convert(nvarchar(max), pages)
  40. from @out
  41. END
  42. dbcc clonedatabase('source database','target clone database')