Как выбрать из вывода хранимой процедуры

Я хочу уметь это делать:

select rows, reserved from sp_spaceused dummytable

но я не могу, потому что sp_spaceused dummytable не возвращает таблицу, даже если она выводит ее как побочный эффект.

Какое обходное решение?

1
0
4 311
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете сохранить результат хранимой процедуры во временной таблице (или в табличной переменной, или даже в физической таблице), а затем запросить ее:

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

Я не уверен, хотите ли вы получить результат 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]

Что не так с этим ответом и он дан ранее. Вы можете объяснить, почему он отклонен? ??

gulshan arora 10.09.2018 08:36

Я думаю, это потому, что я дал общий ответ, а не конкретный для требований пользователя. Думаю, я, должно быть, использовал точную структуру процедуры sp_spaceused.

Ashish Sharma 10.09.2018 08:45

Спасибо, что указали на это, в будущем я буду иметь это в виду, прежде чем публиковать любой ответ :)

Ashish Sharma 10.09.2018 08:46

Попробуй это:

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;

Вы можете проверить официальная документация, потому что системная хранимая процедура может возвращать разное количество столбцов в зависимости от входных параметров. Определение вашей таблицы должно соответствовать количеству и типу возвращаемых столбцов.

Другие вопросы по теме