Как выполнить процедуру в функции SQL Server

Мне нужна эта функция:

create function test (@InVar int)
returns nvarchar(max) as
begin
  declare @OutVar nvarchar(max);
  exec someProcedure @InVar, @OutVar out;
  return @OutVar
end

Я хочу :

select *, dbo.test(ID)
from SomeTable

И вы не можете выполнить хранимую процедуру из функции.

Dale K 28.05.2019 06:51

О, извините, это не какая-то функция, это какая-то процедура

GG WP 28.05.2019 06:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
123
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Кажется, вы хотите выполнить хранимую процедуру someProcedure из функции test. Это также то, что вы явно спрашиваете.

Это не разрешено, поэтому вы не можете этого сделать. Функции в SQL Server никогда не должны иметь побочных эффектов.

Как указано в Документация Microsoft по функциям, определяемым пользователем:

The statements in a BEGIN...END block cannot have any side effects. Function side effects are any permanent changes to the state of a resource that has a scope outside the function such as a modification to a database table. The only changes that can be made by the statements in the function are changes to objects local to the function, such as local cursors or variables. Modifications to database tables, operations on cursors that are not local to the function, sending e-mail, attempting a catalog modification, and generating a result set that is returned to the user are examples of actions that cannot be performed in a function.

Note

If a CREATE FUNCTION statement produces side effects against resources that do not exist when the CREATE FUNCTION statement is issued, SQL Server executes the statement. However, SQL Server does not execute the function when it is invoked.

Так что, похоже, вам нужно найти другую стратегию, чтобы делать то, что вы хотите.

Ваш код идеален, но он не работает, потому что

Из функции могут выполняться только функции и некоторые расширенные хранимые процедуры.

Предлагаю вместо SP реализовать логику в самой функции.

Другие вопросы по теме

Похожие вопросы