我有一个现有的存储过程,它基本上返回两个表,第一个表只是一个未命名列中的一个整数,第二个表有一行命名列。
我需要构建一个新的存储过程来执行现有的存储过程并使用现有存储过程返回的第二个表中的数据,并忽略第一个表/整数。
以下是我的尝试,但它返回错误,"列名或提供的值数与表定义不匹配"因为第一个表/整数。
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
有没有办法写这个忽略第一个表/整数?
答案 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,则只返回相对结果集。