如何从存储过程输出中选择

时间:2018-09-10 05:24:59

标签: sql sql-server tsql stored-procedures

我希望能够做到这一点:

select rows, reserved from sp_spaceused dummytable

但是我不能,因为“ sp_spaceused dummytable”即使返回一个表也不会返回表。

解决方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以将存储过程的结果存储到临时表(或表变量,甚至是物理表)中,然后查询该表:

--drop table if exists #temp
create table #temp(name nvarchar(100), rows int, reserved nvarchar(100), data nvarchar(100), index_size nvarchar(100), unused nvarchar(100))

insert into #temp
exec sp_spaceused 'dummytable'

select [rows], [reserved] 
from #temp

答案 1 :(得分:1)

尝试一下:

DECLARE @DataSource TABLE
(
    [name] SYSNAME
   ,[rows] CHAR(20)
   ,[reserved] VARCHAR(18)
   ,[data] VARCHAR(18)
   ,[index_size] VARCHAR(18)
   ,[unused] VARCHAR(18)
);

INSERT INTO @DataSource
EXEC sp_spaceused 'dbo.table_name';

SELECT [rows]
      ,[reserved] 
FROM @DataSource;

您可以检查official documentation,因为系统存储过程可以根据输入参数返回不同数量的列。您的表定义必须与返回的列号和类型匹配。

答案 2 :(得分:-1)

我不确定是否要在表中获取SP的输出。如果是,则必须创建一个类似于SP输出的表结构,然后使用该表来检索结果:

CREATE TABLE #tempData
(
        [Status] VarChar(20),
        SubCategoryId INT,
        ClientName VarChar(200),
        ProjectName VarChar(200),
        EmployeeName VarChar(100),
        Department VarChar(20),
        ManagerName VarChar(100),
        [Role] VarChar(50)
)

Insert Into #tempData
            EXEC [Your SP Name] [Parameters]