Estou procurando o que espero que seja algo facilmente alcançável sem uma tonelada de codificação.
Eu tenho um procedimento armazenado que faz algum trabalho e tem cerca de 20 parâmetros opcionais:
CREATE PROCEDURE dowork
@param1_1=NULL,
@param1_2=NULL
.....@Param1_30=NULL
Estou implementando outro procedimento, que vai chamar esse, e idealmente, quero oferecer todos os parâmetros, mas usar apenas aqueles que foram definidos:
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
O exemplo acima funcionará como está ou preciso criar uma variável de algum tipo para conter todos os parâmetros 'set', por exemplo?
Os parâmetros são estáticos. Eu usei o número 1 a 30 como exemplo, mas eles são todos estáticos. Exemplos: @StartTime
, @EndTime
, @Type
, @Location
etc.
Atualmente dowork, processa um lote com base na entrada dos parâmetros. Para determinadas cargas de trabalho, preciso processar cada lote, um de cada vez, em vez de todos ao mesmo tempo.
Ao criar um procedimento de abstração, estou planejando criar uma variável de tabela para manter uma linha para cada lote e, em seguida, passá-los um por um, permitindo mais controle sobre cada lote que exigimos em determinadas circunstâncias. Isso fará com que o procedimento original funcione como funcionava quando necessário para trabalhos em lote em massa.
Se você definir o valor de um determinado parâmetro para seu valor padrão (quando ele tiver um), você obterá o mesmo equivalente funcional ao omiti-lo. Portanto, sugiro fazer algo como o seguinte:
A única falha são os valores que não possuem um valor padrão, o que resultará na passagem de um NULL vs causando o erro que ocorreria quando omitido. Se isso for uma preocupação no seu caso particular, eu faria algumas verificações antes e lançaria um erro.
A única outra alternativa que eu poderia sugerir seria SQL dinâmico.