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

Откуда: Новосибирск
Сообщений: 563
Товарищи имеется функция на sql 2000:


CREATE FUNCTION dbo.fn_VisitReports (@subject_id int, @parent_form int, @parent_id int)
RETURNS @VisitReports TABLE (subject_id int, parent_form int,
entexp nvarchar (100), percents money)
AS
BEGIN
......................................................

declare @sqlText nvarchar (500)
declare @lastDoseDate datetime
declare @lastDose datetime

set @sqlText = 'Select @lastDoseDate = case ISDATE (date_last_dose) when 1 then date_last_dose else null end from _frm_' + @trial_uid + '_discontinuation where record_id = ' + cast (@treerecord_id_Early as nvarchar (50))
exec sp_executesql @sqlText,N'@lastDoseDate datetime out', @lastDoseDate = @lastDoseDate out

if (isdate (@lastDoseDate) = 1) and (isdate (@visitDate) = 1)
begin
if (@visitDate > @lastDoseDate)
set @factor = 0
if (@visitname = '4-week Post-Treatment Telephone Call') or (@visitname = 'Key Reportable Events')
set @factor = 1
end;

................................................

RETURN
END


при вызове имеется ругань:
Only functions and extended stored procedures can be executed from within a function.

Можно ли и как победить это дело ?

Заранее благодарю!!!!
4 май 05, 11:21    [1515342]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Можно ли и как победить это дело ?


Нет, нельзя. Смотри BOL->CREATE FUNCTION на предмет разрешенных действий внутри функции.
4 май 05, 11:34    [1515391]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
А какие stored procedures являются extended ?
4 май 05, 11:35    [1515395]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
mike160
Member

Откуда: Москва
Сообщений: 146
Дмитрий Орлов
А какие stored procedures являются extended ?

Те, что в базе master называются Extended Stored Procedures :)
4 май 05, 11:45    [1515436]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
Те получается в функции невозможно выполнить sql запрос с возвратом результата ?
4 май 05, 11:46    [1515445]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Дмитрий Орлов
Те получается в функции невозможно выполнить sql запрос с возвратом результата ?


Почему, можно. Но только не через динамический SQL.
4 май 05, 11:51    [1515467]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
Дмитрий Орлов
Те получается в функции невозможно выполнить sql запрос с возвратом результата ?

Запрос - возможно. Только у вас не запрос в вызов процедуры
4 май 05, 11:51    [1515471]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
А как ?
4 май 05, 11:52    [1515474]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
BOL->CREATE FUNCTION, Example B, C.
4 май 05, 11:52    [1515477]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
Дмитрий Орлов
А как ?

Как выполнить запрос ??? Написать SELECT ...
4 май 05, 11:53    [1515481]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
Glory
Дмитрий Орлов
Те получается в функции невозможно выполнить sql запрос с возвратом результата ?

Запрос - возможно. Только у вас не запрос в вызов процедуры


Те если

exec @sqlText

а не

exec sp_executesql @sqlText,N'@lastDoseDate datetime out', @lastDoseDate = @lastDoseDate out

то будет счастье?

Но как мне забрать тогда значение ?
4 май 05, 11:54    [1515486]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
то будет счастье?
exec - это НЕ запрос
4 май 05, 11:54    [1515489]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
Так кто нибудь мкажет как в функции получить результат выполнения sql запроса:

set @sqlText = 'Select @lastDoseDate = case ISDATE (date_last_dose) when 1 then date_last_dose else null end from _frm_' + @trial_uid + '_discontinuation where record_id = ' + cast (@treerecord_id_Early as nvarchar (50))

те который храниться в строке ?
4 май 05, 11:57    [1515498]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Дмитрий Орлов
Так кто нибудь мкажет как в функции получить результат выполнения sql запроса:

set @sqlText = 'Select @lastDoseDate = case ISDATE (date_last_dose) when 1 then date_last_dose else null end from _frm_' + @trial_uid + '_discontinuation where record_id = ' + cast (@treerecord_id_Early as nvarchar (50))

те который храниться в строке ?


НЕТ! Откройте, документацию в конце то концов!
4 май 05, 11:58    [1515509]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
Все вопрос закрыт! Всем спасибо!!!
4 май 05, 12:02    [1515524]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Дмитрий Орлов
Member

Откуда: Новосибирск
Сообщений: 563
mike160
Дмитрий Орлов
А какие stored procedures являются extended ?

Те, что в базе master называются Extended Stored Procedures :)


Кстати sp_executesql эта самая что ненаесть Extended Stored Procedures
4 май 05, 12:29    [1515635]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
Дмитрий Орлов
mike160
Дмитрий Орлов
А какие stored procedures являются extended ?

Те, что в базе master называются Extended Stored Procedures :)


Кстати sp_executesql эта самая что ненаесть Extended Stored Procedures


Этого недостаточно для вызова расширенной ХП из функции.
4 май 05, 12:36    [1515663]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Вызов stored procedure из функции  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Alexey Sh,

Здравствуйте, похожая проблема - нужно в Функции сделать update, а он не даёт, а функция нужна и update в ней то же, как изголиться?
26 янв 15, 09:43    [17168791]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
как изголиться?

Читать хелп, пока не дойдет, что ограничения потому и называются ограничениями, что они определяют границы. За которые нельзя выйти.
26 янв 15, 09:49    [17168824]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory,

А можете в двух словах привести пример, почему ввели такое ограничение?
26 янв 15, 09:54    [17168854]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
Glory,

А можете в двух словах привести пример, почему ввели такое ограничение?

http://www.microsoft.com/en-us/server-cloud/products/sql-server/Support.aspx
26 янв 15, 09:57    [17168865]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
R-Magistr
А можете в двух словах привести пример, почему ввели такое ограничение?
В процедурах разрешены действия, которые запрещены в функциях. Поэтому в функциях запретили так же и вызов процедур, так как иначе проверка "в рекурсии" была бы очень сложна.
26 янв 15, 11:14    [17169336]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Функция обычно используется в полях SELECTа.
Представьте что будет, если она во время выборки датасета
будет ещё и апдейтить что-то где-то, куда-то инсертить (с триггерами, констрейнтами и т.д.!),
слать смски и емэйлы, и всё это для каждой строки, возвращаемой SELECTом!
26 янв 15, 11:34    [17169473]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
R-Magistr
Alexey Sh,

Здравствуйте, похожая проблема - нужно в Функции сделать update, а он не даёт, а функция нужна и update в ней то же, как изголиться?


Встречный вопрос, а зачем в функции update?
26 янв 15, 13:34    [17170549]     Ответить | Цитировать Сообщить модератору
 Re: Вызов stored procedure из функции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7869
Задача функции - вернуть данные, задача процедуры - выполнить действия над данными.
26 янв 15, 17:06    [17172318]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить