注意:最高链接的问题并没有解决系统存储过程的问题,但它很接近。在评论者的帮助下,我得出了一个可行的答案。
尝试对sp_spaceused使用如下语句,会引发错误
SELECT * INTO #tblOutput exec sp_spaceused 'Account'
SELECT * FROM #tblOutput
错误:
必须指定要从中选择的表。
和:
缺少对象或列名称或为空。对于 SELECT INTO 语句,验证每一列都有一个名称。对于其他语句,请查找空别名。不允许使用定义为 "" 或 [] 的别名。将别名更改为有效名称。
当我完全声明一个表变量时,它会按预期工作,所以在我看来,存储过程确实返回了一个实际的表。
CREATE TABLE #tblOutput (
name NVARCHAR(128) NOT NULL,
rows CHAR(11) NOT NULL,
reserved VARCHAR(18) NOT NULL,
data VARCHAR(18) NOT NULL,
index_size VARCHAR(18) NOT NULL,
unused VARCHAR(18) NOT NULL)
INSERT INTO #tblOutput exec sp_spaceused 'Response'
SELECT * FROM #tblOutput
为什么不能使用结果集为的临时表或表变量EXECUTE sp_xxx
?或者:是否存在比每次都必须预定义完整表更紧凑的表达式?
(顺便说一句,在撰写本文时,谷歌搜索确切的术语,只返回一个结果)SELECT * INTO #tmp exec sp_spaceused