【问题标题】:How to select from stored procedure output [duplicate]如何从存储过程输出中进行选择[重复]
【发布时间】:2018-09-10 13:38:53
【问题描述】:

我希望能够做到这一点:

select rows, reserved from sp_spaceused dummytable

但我不能,因为“sp_spaceused dummytable”不返回表,即使它输出一个作为副作用。

解决方法是什么?

【问题讨论】:

    标签: sql sql-server tsql stored-procedures


    【解决方案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】:

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

      --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
      

      【讨论】:

        【解决方案3】:

        我不确定您是否想在表中获取 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]
        

        【讨论】:

        • 这个答案有什么问题,前面已经给出了。你能解释为什么它被否决。 ??
        • 我认为这是因为我给出了通用答案,而不是针对用户要求。我想我一定使用了 sp_spaceused 过程的确切结构。
        • 感谢您指出这一点,以后我会在发布任何答案之前记住这一点:)
        猜你喜欢
        • 2010-11-29
        • 2016-07-03
        • 2010-12-02
        • 2021-08-21
        • 2021-07-23
        • 2010-12-10
        • 1970-01-01
        • 2014-07-17
        相关资源
        最近更新 更多