intente cambiar su método si necesita hacer un ciclo.
dentro del procedimiento primario almacenado, cree una tabla #temp que contenga los datos que necesita procesar. Llame al procedimiento almacenado secundario, la tabla #temp estará visible y podrá procesarla, con suerte trabajando con todo el conjunto de datos y sin un cursor o bucle.
esto realmente depende de lo que este procedimiento almacenado hijo está haciendo. Si está ACTUALIZANDO, puede "actualizar desde" unirse en la tabla #temp y hacer todo el trabajo en una declaración sin un bucle. Lo mismo se puede hacer para INSERT y DELETE. Si necesita realizar varias actualizaciones con IF, puede convertirlas a múltiples UPDATE FROM
con la tabla #temp y usar las sentencias CASE o WHERE conditions.
Cuando trabaje en una base de datos intente perder la mentalidad de bucle, es un drenaje de rendimiento real, causará bloqueo/bloqueo y ralentizará el procesamiento. Si realiza un bucle en todas partes, su sistema no se escalará muy bien y será muy difícil acelerarlo cuando los usuarios comiencen a quejarse por la lentitud de las actualizaciones.
Publique el contenido de este procedimiento que desea llamar en un bucle, y apostaría 9 de cada 10 veces, podría escribirlo para trabajar en un conjunto de filas.
Es necesario para especificar qué RDBMS: la respuesta será diferente para SQL Server, Oracle, MySql, etc. –
Lo más probable es que no necesite un procedimiento almacenado. ¿Puedes describir exactamente "qué" es el procedimiento almacenado? Tal vez todo el proceso se puede expresar como una única declaración de actualización. Por lo general, se debe evitar el patrón "do una vez para cada registro", si es posible. – Tomalak
¿Qué base de datos estás usando? –