Вы не можете выполнить хранимую процедуру внутри функции, поскольку функции не разрешено изменять состояние базы данных, а хранимым процедурам разрешено изменять состояние базы данных.
Это по определению (см. CREATE FUNCTION - Ограничения и ограничения ).
Пользовательские функции не могут использоваться для выполнения действий, которые изменяют состояние базы данных..
Хранимая процедура может изменить состояние базы данных или нет.Но компилятору SQL Server не нужно анализировать хранимую процедуру, чтобы узнать, изменяет ли она состояние базы данных.Поэтому нельзя выполнять хранимую процедуру изнутри функции.
Существуют функции для простого вычисления чего-либо, значения или результата таблицы, не более того.Эти функции можно вызывать, например, в запросе SELECT
, например,
SELECT calculate_something(a) FROM some_table;
. Теперь рассмотрим, что произойдет, если функции calculate_something
будет разрешено выполнить хранимую процедуру, которая удалит все строки в * 1022.*.Ваше намерение состоит в том, чтобы вычислить что-либо, используя значение столбцов some_table.a
, но в итоге вы ... удаляете все строки в some_table
.Это явно не то, что вы хотите, чтобы произошло.