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

Откуда:
Сообщений: 29
Добрый день.
Помогите пожалуйста с задачкой. Мне нужна table-valued функция, которая возвращает результат выполнения динамического запроса. У меня выпадает ошибка: Invalid use of a side-effecting operator 'INSERT EXEC' within a function.
Как правильно сделать? Нужна именно функция, т.к. потом будет использоваться в cross apply.
Пример функции:
ALTER FUNCTION [dbo].[MyFunc]
(
	@WhereStr varchar(4000)
)
RETURNS 
@Res TABLE 
(	
	ID int
)
AS
BEGIN

	declare @query varchar(8000)
	set @query =	' select id from table where ' + @WhereStr
	
	insert into @Res
	exec (@query)

	RETURN 
END
12 дек 12, 10:42    [13617241]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
MSBI
Как правильно сделать?

Никак
12 дек 12, 10:43    [13617248]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
aleks2
Guest
Тибе в Microsoft Corp.
12 дек 12, 10:44    [13617254]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
MSBI
Member

Откуда:
Сообщений: 29
Ну а другим способом можно решить поставленную задачу?
12 дек 12, 10:47    [13617271]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
MSBI
Ну а другим способом можно решить поставленную задачу?

Не использовать динамический запрос.
12 дек 12, 10:48    [13617275]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
MSBI
Member

Откуда:
Сообщений: 29
Glory
MSBI
Ну а другим способом можно решить поставленную задачу?

Не использовать динамический запрос.

Не получается. У меня where строится динамически, на основе данных из другой таблицы
12 дек 12, 10:51    [13617302]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
MSBI
Не получается.

А вы пытайтесь.
12 дек 12, 10:51    [13617310]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
MSBI
Member

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

Можно попросить Вас больше не отвечать в этой теме?
12 дек 12, 10:54    [13617332]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
MSBI,
простите ,но вы думаете от етого что-то изменится ?
Ограничения в UDF от етого не исчезнут
12 дек 12, 10:55    [13617345]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Glory
Member

Откуда:
Сообщений: 104760
MSBI
Можно попросить Вас больше не отвечать в этой теме?

Попросить можно. Заставить - нет.
Есть документированное ограничение на использование динамических запросов в функциях
И ваше желание не уберут эти ограничения
Так что придется смириться и таки пересмотреть выбранный вами способ решения.
12 дек 12, 10:58    [13617377]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Гость333
Member

Откуда:
Сообщений: 3683
MSBI
Glory
пропущено...

Не использовать динамический запрос.

Не получается. У меня where строится динамически, на основе данных из другой таблицы

Покажите, как строится ваш where. Возможно, его можно будет заменить подзапросом, джойном или ещё как-то.
12 дек 12, 11:19    [13617558]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
MSBI
Member

Откуда:
Сообщений: 29
Гость333,

Нет, не получится. Там сложная иерархическая система условий, с включениями и исключениями.

Всем спасибо, динамический запрос я оставил, но использовал его в процедуре вместо фукции.
12 дек 12, 11:27    [13617644]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
MSBI
Гость333,

Нет, не получится. Там сложная иерархическая система условий, с включениями и исключениями.

Всем спасибо, динамический запрос я оставил, но использовал его в процедуре вместо фукции.
А как же
MSBI
Нужна именно функция, т.к. потом будет использоваться в cross apply
?
12 дек 12, 12:32    [13618192]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
MSBI
Member

Откуда:
Сообщений: 29
iap
А как же
MSBI
Нужна именно функция, т.к. потом будет использоваться в cross apply
?

Пришлось переделать эту часть без cross apply.
12 дек 12, 13:23    [13618697]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Проходивший
Guest
MSBI,
Сходу вариантов 2:
- временные таблицы для условия
- работа с нужным вариантом параметра в строке

exec - нужен
12 дек 12, 14:31    [13619384]     Ответить | Цитировать Сообщить модератору
 Re: Динамический sql в функции  [new]
Проходивший
Guest
MSBI, извиняюсь exec - НЕ нужен.
12 дек 12, 14:33    [13619397]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить