Можем ли мы вызвать хранимый процесс из функции? - PullRequest
0 голосов
/ 23 августа 2010

Можем ли мы вызвать хранимую процедуру из функции в SQL? В чем причина?

Ответы [ 4 ]

2 голосов
/ 23 августа 2010

Да.

Вы можете сделать это с небольшим взломом, включающим openrowset, но это не рекомендуется, так как откроет новое соединение.

CREATE FUNCTION dbo.test ()
RETURNS  varchar(200)
AS
BEGIN
    RETURN (Select top 1 [Name] from 
OPENROWSET('SQLNCLI','Server=.\SQL2008;Trusted_Connection=yes;','SET NOCOUNT ON;SET FMTONLY OFF;EXEC MASTER..SP_HELP') 
)

END
GO

SELECT dbo.test()
2 голосов
/ 23 августа 2010

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

1 голос
/ 23 августа 2010

Быстрый ответ: Нет.

Почему: Хранимая процедура не создает никаких выходных данных, которые могут быть повторно использованы внутри SQL.

0 голосов
/ 23 августа 2010

Чтобы быть эффективной, функция должна быть детерминированной, т. Е. Выходные данные должны зависеть только от входных данных, чтобы результат можно было кэшировать.

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

...