データベース内のどのテーブルが最も多くのスペースを占有しているかの詳細を意味のある形で提供しようとしている次の TSQL があります。それ自体で、次のようなものを使用できます。
INSERT INTO #Data
EXEC sp_spaceused N'tableNameHere'
そして、この作品ファイル。ただし、これを拡張してすべてのテーブルの情報を返すには問題があります。コード;
CREATE TABLE #Data
(
tableName varchar(100),
numberofRows varchar(100),
reservedSize varchar(50),
dataSize varchar(50),
indexSize varchar(50),
unusedSize varchar(50)
)
SELECT so.name, sp.*
FROM dbo.sysobjects so
OUTER APPLY (INSERT INTO #Data
OUTPUT inserted.tableName,
inserted.numberofRows,
inserted.reservedSize,
inserted.dataSize,
inserted.indexSize,
inserted.unusedSize
EXEC sp_spaceused name
) sp
WHERE OBJECTPROPERTY(so.id, N'IsUserTable') = 1
ORDER BY sp.dataSize DESC, sp.indexSize DESC
DROP TABLE #Data
ただし、これにより次のエラーが発生します。
Msg 120, Level 15, State 1, Line 19
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
名前でも挿入リストが結果セットのリストと一致することを二重および三重にチェックしましたが、それでも同じエラーが発生します。何か案は?