You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sp_spaceused查询临时表空间并插入另一临时表报错如何解决

错误根因

sp_spaceused 默认查找当前业务数据库(示例报错中为d1库)下的对象,而#开头的本地临时表实际存储在系统库tempdb中,直接传入临时表名作为参数时,存储过程会在当前业务库检索对象,找不到对应表就会抛出15009错误。

解决方法

调用sp_spaceused时,明确指定@objname参数,并给临时表名加上tempdb..前缀,标识该对象在tempdb库中即可,修正后的插入语句如下:

INSERT INTO #FileSize EXEC sp_spaceused @objname = N'tempdb..#Found_Subscriber'
INSERT INTO #FileSize EXEC sp_spaceused @objname = N'tempdb..#Found_SubscriberInfo'
-- 其余需要统计的临时表都按上述格式编写即可

批量统计优化方案

因为你需要统计100张临时表,手动写100条插入语句效率太低,可以用游标循环批量处理:

-- 1. 先维护需要统计的临时表名清单
DECLARE @TempTableList TABLE (TableName NVARCHAR(128))
INSERT INTO @TempTableList (TableName)
VALUES 
(N'#Found_Subscriber'),
(N'#Found_SubscriberInfo')
-- 剩余98张临时表名按上述格式追加即可

-- 2. 循环执行统计插入
DECLARE @CurrentTableName NVARCHAR(128), @ExecSql NVARCHAR(MAX)
DECLARE stat_cursor CURSOR FOR 
SELECT TableName FROM @TempTableList

OPEN stat_cursor
FETCH NEXT FROM stat_cursor INTO @CurrentTableName
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @ExecSql = N'INSERT INTO #FileSize EXEC sp_spaceused @objname = N''tempdb..' + @CurrentTableName + ''''
    EXEC sp_executesql @ExecSql
    FETCH NEXT FROM stat_cursor INTO @CurrentTableName
END

CLOSE stat_cursor
DEALLOCATE stat_cursor

验证

所有表统计完成后,直接查询#FileSize表即可看到所有临时表的空间占用、行数等数据:

SELECT * FROM #FileSize

内容的提问来源于stack exchange,提问作者Aquaphor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:05