如何插入[第二个临时表] FROM [存储过程返回两个表]

时间:2014-05-07 13:55:55

标签: sql sql-server stored-procedures

我有一个现有的存储过程,它基本上返回两个表,第一个表只是一个未命名列中的一个整数,第二个表有一行命名列。

我需要构建一个新的存储过程来执行现有的存储过程并使用现有存储过程返回的第二个表中的数据,并忽略第一个表/整数。

以下是我的尝试,但它返回错误,"列名或提供的值数与表定义不匹配"因为第一个表/整数。

CREATE PROCEDURE [dbo].[New_StoredProcedure]
AS
BEGIN
CREATE TABLE #temptable(X VARCHAR(20), Y INT, Z VARCHAR(100))
INSERT INTO #temptable(X, Y, Z)
EXEC [Existing_StoredProcedure]
    @a = '1',
    @b = '2',
    @c = '3'

SELECT * FROM #temptable
DROP TABLE #temptable
END

有没有办法写这个忽略第一个表/整数?

1 个答案:

答案 0 :(得分:1)

另一种控制返回结果集的方法是添加一个额外的参数,该参数将决定调用存储过程时返回的数量和结果集。

例如,在您的[Existing_StoredProcedure]中,您可以执行类似.....

的操作
ALTER PROCEDURE [Existing_StoredProcedure]
@a    VARCHAR(10),
@b    VARCHAR(10),
@c    VARCHAR(10),
@ResultSet INT = NULL    --<-- Indicator Param
AS 
BEGIN
  SET NOCOUNT ON;

  -- Common code that executes regardless of what result set is required


  -- Now return the result set based on value passed to @ResultSet       
  IF (@ResultSet = 1 OR @ResultSet IS NULL)
    BEGIN
       -- Code for 1st result set  
    END

  IF (@ResultSet = 2 OR @ResultSet IS NULL)
    BEGIN
       -- Code for 2nd result set  
    END

END 

现在,如果你没有向@ResultSet param传递任何值,则会返回两个结果集,但如果传递1或2,则只返回相对结果集。