SQL Server 根据参数调用特定的存储过程

4c8rllxm  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(159)

我有存储过程:

  1. [SP_Fetch_Budget_Data_ADF]
  2. SP_Fetch_Data_ADF
    这两个存储过程具有相同的参数:
CREATE PROCEDURE [DW].[SP_Fetch_Budget_Data_ADF]
    @Date varchar(10), 
    @Entity varchar (12), 
    @Scenario varchar(10)

参数是从其他工具传递过来的。我的目标是编写第三个存储过程,在其中传递参数@Scenario varchar(10)(与上面显示的两个存储过程的参数相同,因此该参数应该传递给所有3个存储过程)。
如果@Scenario ="实际",则执行SP_Fetch_Data_ADF,否则执行SP_Fetch_Budget_Data_ADF
我找到了这个answer,但是我不知道如何传递参数。

    • 更新**

下面是我的代码,但我得到这个错误:
找不到存储过程"SP_Fetch_Budget_Data_ADF"
代码:

CREATE PROCEDURE [DW].[SP_EXECUTE_ADF] 
    @Scenario varchar(10)  
AS
BEGIN
    SET NOCOUNT ON;
   
    DECLARE @queryToRun NVARCHAR(128) = 'EXECUTE ';

    SELECT @queryToRun = @queryToRun + CASE
                                         WHEN @Scenario  = 'actual'
                                            THEN 'DW.SP_Fetch_Data_ADF'
                                         ELSE 'DW.SP_Fetch_Budget_Data_ADF'
                                      END

    EXECUTE sp_executesql @queryToRun;
END
vohkndzv

vohkndzv1#

只需使用IF语句来选择要调用的过程(并去掉sp_前缀;存储过程不应该有 any 前缀,更不用说特殊的sp_前缀了

CREATE OR ALTER PROCEDURE DW.Fetch_Budget_Data_ADF
    @Date varchar(10), 
    @Entity varchar (12)
as
select 1 a
go
CREATE OR ALTER PROCEDURE DW.Fetch_Data_ADF
    @Date varchar(10), 
    @Entity varchar (12)
as
select 2 a

go

CREATE PROCEDURE DW.EXECUTE_ADF
    @Date varchar(10), 
    @Entity varchar (12), 
    @Scenario varchar(10) 
as
begin
  if @Scenario = 'actual'
  begin
    exec Fetch_Data_ADF @Date, @Entity
  end
  else
  begin
    exec Fetch_Budget_Data_ADF @Date, @Entity
  end

end

相关问题