123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- SET NOCOUNT ON
- Use <source database to be cloned>
- go
- --IF EXISTS(select * from sys.databases where name='db2')
- --ALTER DATABASE db2 set single_user with rollback immediate;
- --DROP DATABASE db2;
- declare @out table(id int identity(1,1),s sysname, o sysname, i sysname, stats_stream varbinary(max), rows bigint, pages bigint)
- declare @dbcc table(stats_stream varbinary(max), rows bigint, pages bigint)
- declare c cursor for
- select object_schema_name(object_id) s, object_name(object_id) o, name i
- from sys.indexes
- where type_desc in ('CLUSTERED COLUMNSTORE', 'NONCLUSTERED COLUMNSTORE')
- declare @s sysname, @o sysname, @i sysname
- open c
- fetch next from c into @s, @o, @i
- while @@FETCH_STATUS = 0 begin
- declare @showStats nvarchar(max) = N'DBCC SHOW_STATISTICS("' + quotename(@s) + '.' + quotename(@o) + '", ' + quotename(@i) + ') with stats_stream'
- insert @dbcc exec sp_executesql @showStats
- insert @out select @s, @o, @i, stats_stream, rows, pages from @dbcc
- delete @dbcc
- fetch next from c into @s, @o, @i
- end
- close c
- deallocate c
- declare @sql nvarchar(max);
- declare @id int;
- select top 1 @id=id,@sql=
- 'UPDATE STATISTICS ' + quotename(s) + '.' + quotename(o) + '(' + quotename(i)
- + ') with stats_stream = ' + convert(nvarchar(max), stats_stream, 1)
- + ', rowcount = ' + convert(nvarchar(max), rows) + ', pagecount = ' + convert(nvarchar(max), pages)
- from @out
- WHILE (@@ROWCOUNT <> 0)
- BEGIN
- exec sp_executesql @sql
- delete @out where id = @id
- select top 1 @id=id,@sql=
- 'UPDATE STATISTICS ' + quotename(s) + '.' + quotename(o) + '(' + quotename(i)
- + ') with stats_stream = ' + convert(nvarchar(max), stats_stream, 1)
- + ', rowcount = ' + convert(nvarchar(max), rows) + ', pagecount = ' + convert(nvarchar(max), pages)
- from @out
- END
- dbcc clonedatabase('source database','target clone database')
|