Um processo de negócio em SQL pode gerar uma variável a cada operação 1-N número de chamadas a um procedimento armazenado cujo objetivo é inserir dados relacionados ao processo principal.
Como alguém executa várias linhas de sql gerado a partir de uma seleção ou existe uma maneira de chamar um procedimento armazenado a partir de uma seleção?
O processo antes desta etapa é uma operação envolvida de lógica de negócios e operações orientadas a dados e fez inserções subsequentes em tabelas unidas FK relacionadas.
Nesse ponto em que precisa chamar um procedimento armazenado, ele tem dados prontos para serem processados em uma variável de tabela. A etapa (lógica dentro do proc) chamando o proc armazenado é um processo envolvido que faz sentido estar em um proc armazenado e não pode ser copiado para o proc existente.
Exemplo falso de código gerado gerado por Select
.
SELECT 'EXEC [sim].[ROI_Save] ' + CONVERT(varchar(6), VSL.PathId) + ', '
+ Convert(varchar(6), @ROIResultId) + ', '
+ CONVERT(varchar(6), RT.routeTypeResultId) + ', '
+ CONVERT(varchar(6), RT.ROI_RouteTypeId) + '; '
FROM @routeResultIds RT
JOIN sim.ROI_Result_Vehicle VSL ON RT.ROI_Result_VehicleId = VSL.ROI_Result_VehicleId
Resultados
Alguém concatena os resultados e chama Exec
?
Embora eu prefira gerar instruções SQL dinâmicas verdadeiras com parâmetros fortemente tipados, a concatenação provavelmente está bem aqui porque a maneira correta será muito mais complicada. Eu, no entanto, prefiro
sp_executesql
aEXEC()
, sempre.Ainda não gosto que os parâmetros do procedimento não sejam nomeados e, se algum dos valores de parâmetro for strings ou datas, o acúmulo de aspas simples rapidamente se tornará muito irritante.
Selecione em uma tabela de comandos. Em seguida, execute os comandos em um loop while.
OU
Crie seus dados de entrada em uma tabela e faça um loop usando sp_executesql com parâmetros.