1

我想在 Sql Server 中创建一个存储过程,它调用许多不同的存储过程之一,并根据提供给它的参数选择哪一个,但我似乎无法正确选择语法。

目前正在尝试:

Begin
  Set nocount on;
  exec iif(param='individual', sp_FindIndividualRespondents, 
      iif(param='org', sp_FindOrgRespondents, sp_FindGroupRespondents))
End

这目前告诉我:'param'附近的语法不正确。

我看过这里:基于存储过程参数的条件 where 子句?,但我不知道如何更改该代码以适应我的情况。

如何为存储过程提供参数,然后使用它来选择和运行不同的存储过程?

4

2 回答 2

1
BEGIN
SET NOCOUNT ON;

   DECLARE @queryToRun NVARCHAR(128) = 'EXECUTE ';

   SELECT @queryToRun = @queryToRun + CASE
                                         WHEN param = 'individual'
                                            THEN 'sp_FindIndividualRespondents'
                                         WHEN param = 'org'
                                            THEN 'sp_FindOrgRespondents'
                                         ELSE 'sp_FindGroupRespondents'
                                      END

    EXECUTE sp_executesql @queryToRun;
END

如果您不需要动态 sql,它在本示例中出现,您不需要,您可以简单地检查该值并运行适当的存储过程:

BEGIN
SET NOCOUNT ON;

   IF param = 'individual'
      EXECUTE sp_findIndividualRespondents;
   ELSE IF param = 'org'
      EXECUTE sp_FindOrgRespondents;
   ELSE
      EXECUTE sp_FindGroupRespondents;
END
于 2012-10-26T05:44:14.477 回答
1
BEGIN 
 IF param = "individual" 
   EXEC Sp_findindividualrespondents; 

 IF param = "org" 
   EXEC Sp_findorgrespondents; 

 IF param = "Nothing" 
   EXEC Sp_findgrouprespondents; 
END 

或者

BEGIN 
 IF param = "individual" 
   EXEC Sp_findindividualrespondents; 
 ELSE IF param = "org" 
   EXEC Sp_findorgrespondents; 
 ELSE 
   EXEC Sp_findgrouprespondents; 
END 
于 2012-10-26T05:45:39.543 回答