テーブルの領域見積


テーブルの領域を見積るSQL(少し正確でない部分もあるが・・・)
テーブル名、行数を指定するとテーブルの構造を元に使用領域を返す。

--レコード数を指定
Declare @Line	Numeric(19)
Set	@Line = 999

--テーブル名を指定
Declare @tblname	varchar(50)
Set	@tblname = 'hogeTbl'


--ディスクサイズを計算
select	table_name,
	row_size						as  レコードのサイズ,
	Rows_Per_Page					as  ページあたりのレコード数,
	(round(@Line  / Rows_Per_Page,0,1))			as	ページ数,
	(round(@Line  / Rows_Per_Page,0,1) * 8192)		as	テーブルのサイズ_バイト
From	(
		select	*
				,8096 / (Row_Size + 2) as Rows_Per_Page
		From	
				(
				select	sys.tables.name as table_name,
						sum(case when system_type_id =  167 Then
							  round(sys.columns.max_length * 0.5 ,0,1)  --varcharの使用桁数を補正
							else
							  sys.columns.max_length
							end)+ 4	 as Row_Size	
				From	sys.tables
				left join sys.columns on sys.tables.object_id = sys.columns.object_id
				group by 	sys.tables.name
				) as tbl
		) as tbl2 
where	table_name = @tblname


動作確認環境:SQL Server 2008