【发布时间】:2018-09-10 13:38:53
【问题描述】:
我希望能够做到这一点:
select rows, reserved from sp_spaceused dummytable
但我不能,因为“sp_spaceused dummytable”不返回表,即使它输出一个作为副作用。
解决方法是什么?
【问题讨论】:
标签: sql sql-server tsql stored-procedures
我希望能够做到这一点:
select rows, reserved from sp_spaceused dummytable
但我不能,因为“sp_spaceused dummytable”不返回表,即使它输出一个作为副作用。
解决方法是什么?
【问题讨论】:
标签: sql sql-server tsql stored-procedures
试试这个:
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,因为系统存储过程可以根据输入参数返回不同数量的列。您的表定义必须与返回的列编号和类型匹配。
【讨论】:
您可以将存储过程的结果存储到临时表(或表变量,甚至是物理表)中,然后查询该表:
--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]
【讨论】: