Вложенные хранимые процедуры

Вложенностью называют ситуацию, когда хранимая процедура вызывает другую процедуру или выполняет управляемый код, ссылаясь на подпрограмму, тип или статистическую функцию среды CLR. Вложенность хранимых процедур и ссылок на управляемый код ограничена 32 уровнями. Уровень вложенности увеличивается на единицу, когда вызванная хранимая процедура или управляемый код начинает выполняться, и уменьшается на единицу, когда заканчивает. Если уровень вложенности превышает максимальное значение, вся цепочка вызовов заканчивается ошибкой. Текущий уровень вложенности хранимых процедур можно получить при помощи функции @@NESTLEVEL.

ms190607.note(ru-ru,SQL.90).gifПримечание.
Любая ссылка на управляемый код внутри хранимой процедуры Transact-SQL считается одним уровнем вложенности. Методы, вызванные из управляемого кода, не учитываются в ограничении на 32 уровня вложенности.

Если хранимая процедура выполняет управляемый код, ссылаясь на подпрограмму, тип или статистическую функцию среды CLR, эта ссылка считается одним уровнем вложенности. Методы, вызванные из управляемого кода, не учитываются в ограничении на 32 уровня вложенности. Текущий уровень вложенности можно получить при помощи функции @@NESTLEVEL. Когда хранимая процедура CLR обращается к данным через управляемого поставщика Microsoft SQL Server, для передачи данных из управляемого кода в SQL добавляется дополнительный уровень вложенности, который учитывается функцией @@NESTLEVEL.

Ошибка во вложенной хранимой процедуре не обязательно должна быть неисправимой для вызывающей хранимой процедуры. При вызове одной хранимой процедуры из другой используйте инструкцию Transact-SQL RETURN и проверяйте код возврата в вызывающей хранимой процедуре. Таким образом можно управлять поведением хранимой процедуры при возникновении ошибок. Дополнительные сведения об использовании кодов возврата см. в разделе Возврат данных с использованием кода возврата.

Хранимые процедуры могут вызывать сами себя, этот способ называется рекурсией.

Несмотря на ограничение на 32 уровня вложенности, Microsoft SQL Server 2005 не ограничивает количество хранимых процедур, которые можно вызвать из некоторой процедуры, если они не вызывают другие процедуры и уровень вложенности не превышает 32 уровня.

См. также

Другие ресурсы

@@NESTLEVEL (Transact-SQL)
RETURN (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005