Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 вызов функции из SELECT  [new]
Impact
Member

Откуда:
Сообщений: 8
Люди добрые, подскажите.
Есть хранимая процедура, которая вычисляет некоторое целое значение. Сама процедура достаточно увесистая. Возникла задача получать это значение в SELECT-е. Я накидал обертку над этой процедурой.

CREATE FUNCTION [GetProgress]
(
	@TaskId INTEGER
)
RETURNS int
AS
BEGIN
	DECLARE @Progress INTEGER
	DECLARE @SPReturnValue INTEGER

	EXEC @SPReturnValue = [dbo].[sp_get_progress] @TaskId, @Progress OUTPUT
	IF @SPReturnValue <> 0
		RETURN 0
	
	RETURN @Progress
END
GO

И теперь пытаюсь вызвать GetProgress в SELECT-е
SELECT GetProgress(5)

SQL выдаёт ошибку

Only functions and extended stored procedures can be executed from within a function.

Подскажите с чем связана эта ошибка?
Стоит ли саму хранимку переделать в фунцию, и если да. то какие с этим появятся ограничения?
7 авг 09, 09:22    [7509094]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
aleks2
Guest
Impact,

SELECT [схема].GetProgress(5)
7 авг 09, 09:32    [7509111]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
aleks2
Guest
А... блин... надож до конца читать.

exec в функции НЕЛЬЗЯ.
7 авг 09, 09:33    [7509117]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
`
Guest
Impact
Люди добрые, подскажите.
Есть хранимая процедура, которая вычисляет некоторое целое значение. Сама процедура достаточно увесистая. Возникла задача получать это значение в SELECT-е. Я накидал обертку над этой процедурой.

CREATE FUNCTION [GetProgress]
(
	@TaskId INTEGER
)
RETURNS int
AS
BEGIN
	DECLARE @Progress INTEGER
	DECLARE @SPReturnValue INTEGER

	EXEC @SPReturnValue = [dbo].[sp_get_progress] @TaskId, @Progress OUTPUT
	IF @SPReturnValue <> 0
		RETURN 0
	
	RETURN @Progress
END
GO

И теперь пытаюсь вызвать GetProgress в SELECT-е
SELECT GetProgress(5)

SQL выдаёт ошибку

Only functions and extended stored procedures can be executed from within a function.

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

вот с этим и связанна - нельзя выполнять хранимки в функции, только функции
>>Стоит ли саму хранимку переделать в фунцию, и если да. то какие с этим появятся ограничения?
те же ограничения и будут - никаких хранимок в функции
7 авг 09, 09:36    [7509125]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
Impact
Member

Откуда:
Сообщений: 8
Хорошо, т.е. плохо. А что значит 'extended stored procedures'?
7 авг 09, 09:38    [7509130]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
Glory
Member

Откуда:
Сообщений: 104760
Impact
Хорошо, т.е. плохо. А что значит 'extended stored procedures'?

Это значит расширенные процедуры. Расширенные в данном случае означает созданные не на TSQL.
На чем именно - написано в хелпе

ЗЫ
А задача отображения прогресса выполнения запроса решается по-другому
7 авг 09, 10:37    [7509428]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
Mayh
Guest
Glory
Impact
Хорошо, т.е. плохо. А что значит 'extended stored procedures'?

Это значит расширенные процедуры. Расширенные в данном случае означает созданные не на TSQL.
На чем именно - написано в хелпе

ЗЫ
А задача отображения прогресса выполнения запроса решается по-другому


А как она решается? не подскажете?
7 авг 09, 12:15    [7510241]     Ответить | Цитировать Сообщить модератору
 Re: вызов функции из SELECT  [new]
Impact
Member

Откуда:
Сообщений: 8
Спасибо за ответы. Переделал хранимку в функцию.
7 авг 09, 14:07    [7511145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить