我有以下 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.
我已经两次和三次检查插入列表是否与结果集匹配,即使按名称,但我仍然得到相同的错误。有任何想法吗?