Для информации - мой вариант запроса по размерам таблицы.
1) Была проблема когда параллельно выгружаешь данные из нескольких баз а временная таблица одна. Для каждой базы нужно создавать таблицу со своим имененм. Переменная должна быть инициализирована выше.
2) Добавил перед началом удаление таблицы если она существует.
3) Если по каким то причинам запрос вылетает (у меня иногда бывает, когда запускаешь в консоли - конфликты блокировок, сделал так чтобы команда выполнялась 30 раз в цикле, если возникает какая то проблема.
ШаблонЗапросаУдаления="if exists (select * from tempdb.dbo.sysobjects where id = object_id('tempdb..[#t_"+ИмяБазыДанных+"]') ) drop table #t_"+ИмяБазыДанных+";";
ШаблонЗапроса = "
|SET NOCOUNT ON;
|declare @sucess int;
|declare @count int;
|set @sucess=0;
|set @count=0;
|WHILE @sucess = 0 and @count<30
|BEGIN
| BEGIN TRY
| BEGIN TRANSACTION;
| "+ШаблонЗапросаУдаления+"
| CREATE TABLE #t_"+ИмяБазыДанных+"([Name] varchar(255), [TableRows] varchar(255), [SizeReserved] varchar(255), [DataSize] varchar(255), [IndexSize] varchar(255), [Unused] varchar(255));
| INSERT INTO #t_"+ИмяБазыДанных+"
| exec sp_spaceused N'%ИмяТаблицы%','true';
| SELECT * FROM #t_"+ИмяБазыДанных+" ORDER BY CONVERT(bigint, REPLACE([SizeReserved], ' KB', '')) DESC;
| "+ШаблонЗапросаУдаления+"
| set @sucess=1;
| COMMIT TRANSACTION;
| END TRY
| BEGIN CATCH
| set @count=@count+1;
| WAITFOR DELAY '00:00:05';
| END CATCH
|END ";
Показать