从一个存储过程获取结果并将它们发送到另一个存储过程

时间:2018-04-19 20:29:46

标签: sql-server tsql

declare @temp table
(
    ItemID varchar(100),
)

INSERT INTO @temp (ItemID, Qt)
    EXEC A 'LA'

然后我想在temp1中获取临时表结果(将显示field1和field2)并使用存储过程B循环这些结果。

2 个答案:

答案 0 :(得分:0)

想想我会提供一个例子(我99%肯定我的评论是正确的,但我认为我会仔细检查。

CREATE PROC dbo.A @x varchar(10) AS SELECT @x FROM (VALUES (1),(1),(1))x(x);
CREATE PROC dbo.B AS SELECT * FROM ##xx;

IF object_id('tempdb..##xx') IS NOT NULL DROP TABLE ##xx;
CREATE TABLE ##xx (col1 varchar(10));

INSERT ##xx EXEC dbo.A 'hi';

EXEC dbo.B;

结果:

col1 
------
hi
hi 
hi 

答案 1 :(得分:0)

您可以创建一个User-Defined Table Type,将变量声明为该类型(而不是声明一个表变量)并将其发送到期望该类型的过程 - 作为READONLY

例如:

CREATE TYPE SomeTableType AS TABLE(
    [Id] INT,
    [Val] VARCHAR(10)
)

创建一个将此类型作为READONLY参数的过程:

CREATE PROCEDURE p_some_procedure_name
    @table SomeTableType READONLY
AS
    SELECT * FROM @table;

现在你可以在任何地方声明你的类型的实例(比如另一个程序),用数据填充它并用它调用p_some_procedure_name

DECLARE @temp_table SomeTableType;

INSERT @temp_table(Id, Val) VALUES (1, 'First'), (2, 'Second');

EXEC p_some_procedure_name @temp_table;

如果可能(通常是这种情况),请避免循环。