Anidar procedimientos almacenados

Los procedimientos almacenados se anidan cuando un procedimiento almacenado llama a otro o ejecuta código administrado mediante una referencia a una rutina, tipo o función de agregado CLR. Puede anidar hasta 32 niveles de procedimientos almacenados y referencias a código administrado. El nivel de anidamiento aumenta en uno cuando el procedimiento almacenado o la referencia de código administrado a los que se ha llamado empiezan a ejecutarse, y disminuye en uno cuando finaliza su ejecución. Si se intenta superar el límite máximo de 32 niveles de anidamiento, se producirá un error general en la cadena de llamada. El nivel actual de anidamiento de los procedimientos almacenados en ejecución se almacena en la función @@NESTLEVEL.

[!NOTA]

Una referencia a código administrado desde un procedimiento almacenado Transact-SQL se considera como un nivel en lo que respecta al límite de anidamiento de 32 niveles. Los métodos a los que se llama desde el código administrado no cuentan para este límite.

Cuando un procedimiento almacenado ejecuta código administrado mediante una referencia a una rutina, tipo o función de agregado CRL, esta referencia también se considera un nivel de anidamiento. Los métodos a los que se llama desde el código administrado no cuentan para este límite. La función @@NESTLEVEL devuelve el nivel actual de anidamiento. Si un procedimiento almacenado CLR realiza operaciones de acceso a datos mediante el proveedor administrado de MicrosoftSQL Server, se agrega un nivel de anidamiento adicional en la transacción desde el código administrado a SQL; este nivel se refleja en la función @@NESTLEVEL.

Un error en un procedimiento almacenado anidado no tiene por qué afectar negativamente al procedimiento que realiza la llamada. Cuando invoque procedimientos almacenados dentro de otros procedimientos almacenados, utilice la instrucción RETURN de Transact-SQL para devolver un código de retorno y comprobarlo en el procedimiento que realiza la llamada. De ese modo, puede especificar el comportamiento de sus procedimientos almacenados cuando se produzcan errores. Para obtener más información sobre la utilización de códigos de retorno, vea Devolver datos mediante un código de retorno.

Los procedimientos almacenados pueden incluso realizar una llamada anidada a sí mismos; esta técnica se denomina recursividad.

Aunque el límite de anidamiento es de 32 niveles, SQL Server no establece límites con respecto al número de procedimientos almacenados que pueden invocarse a partir de un procedimiento almacenado determinado, siempre y cuando los procedimientos subordinados no llamen a otros procedimientos subordinados y no se supere nunca el nivel de anidamiento máximo.