我正在寻找无需大量编码即可轻松实现的东西。
我有一个存储过程可以完成一些工作并且有大约 20 个可选参数:
CREATE PROCEDURE dowork
@param1_1=NULL,
@param1_2=NULL
.....@Param1_30=NULL
我正在实施另一个过程,它将调用那个过程,理想情况下,我想提供所有参数,但只使用已设置的参数:
CREATE PROCEDURE CallWork
@param1=NULL,
@param2=NULL
.....@Param30=NULL
AS BEGIN
--Do some stuff
EXEC dowork
@param1_1=@param1,
@param1_2=@param2
.....@Param1_30=@Param30
上面的例子会按原样工作吗,或者我是否需要创建某种变量来保存所有“设置”参数?
参数是静态的。我以数字 1 到 30 为例,但它们都是静态的。示例:@StartTime
、@EndTime
、@Type
等@Location
。
当前 dowork,根据参数的输入处理批次。对于某些工作负载,我需要它一次处理一个批次,而不是同时处理所有批次。
通过创建一个抽象过程,我计划创建一个表变量来为每个批次保存一行,然后将它们一个接一个地传递,以便在某些情况下更好地控制我们需要的每个批次。然后,这将使原始过程像批量批处理作业所需的那样运行。
如果您将给定参数的值设置为其默认值(当它有一个时),您将获得与省略它相同的功能等价物。因此,我建议执行以下操作:
唯一的缺陷是没有默认值的值,这将导致传递 NULL 与导致在省略时会发生的错误。如果在您的特定情况下这是一个问题,我会事先进行一些检查并抛出错误。
我可以建议的唯一其他选择是动态 SQL。