。
私はこれがOPが求めていたこととまったく同じではないことを認識しています。これはGoogleの「SQL Serverのカラムスペースが使用されている」という貧しい人々の利益のためです。
それはmy gist hereでもあります。
create table #space ([table] nvarchar(255), [column] nvarchar(255) not null, [bytes] bigint null);
declare @sql varchar(max) = ''
declare @tablepattern as varchar(255) = '%'
declare @exclusionpattern as varchar(255) = ''
select @sql = @sql + 'insert into #space select ''' + t.name + ''', ''' + c.name + ''', sum(datalength([' + c.name + '])) as bytes from [' + t.name + '];'
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name like @tablepattern and t.name not like @exclusionpattern;
exec (@sql)
select [table], format(sum([bytes]), '#,#') as [size]
from #space
group by [table]
order by sum(bytes) desc;
select [table], [column], format([bytes], '#,#') as [size]
from [#space]
order by [bytes] desc;
drop table #space
私は「問題のテーブルから列をドロップし、データベースのコピーを作成し、サイズ違いを取る、」言うが、データベースが、その大きさである場合には、おそらく多少実行不可能だろうと思います。 – JAB
ええ、それはちょっと私の代替計画です。私が持っている問題は、私たちの "開発"データベースは、私たちのプロダクションのダウンしたバージョンであるということです。開発の曲は1 GB、実際の制作は5 GBまたは6 GBに近い –