declare @temp table
(
ItemID varchar(100),
)
INSERT INTO @temp (ItemID, Qt)
EXEC A 'LA'
然后我想在temp1中获取临时表结果(将显示field1和field2)并使用存储过程B循环这些结果。
答案 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;
如果可能(通常是这种情况),请避免循环。