Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Джек Member Откуда: Сообщений: 574 |
Добрый день всем! Пытаюсь из пользовательской функции вставить записи в таблицу базы, при сохранении её выдаётся ошибка: Invalid use of side-effecting or time-dependent operator in 'INSERT' within a function Мне это нужно, потому что переменные типа table в это функции, при использовании её в запросе(она там много раз вызывается), вызывают зависание выполнения. Что делать? |
11 июн 14, 10:07 [16152662] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Написать функцию так, чтобы не было зависаний |
||
11 июн 14, 10:11 [16152681] Ответить | Цитировать Сообщить модератору |
sphinx_mv Member [заблокирован] Откуда: Сообщений: 1672 |
тынц |
||
11 июн 14, 10:35 [16152817] Ответить | Цитировать Сообщить модератору |
Джек Member Откуда: Сообщений: 574 |
Glory, Я поэтому и хочу в функции вместо локальных переменных типа table, собирать данные в базовые таблицы. |
11 июн 14, 12:10 [16153663] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А придется все равно написать нормально работающую функцию. |
||
11 июн 14, 12:12 [16153674] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||
11 июн 14, 12:12 [16153677] Ответить | Цитировать Сообщить модератору |
sphinx_mv Member [заблокирован] Откуда: Сообщений: 1672 |
Если "очень хочется", то вместо функции используйте хранимую процедуру - и будет Вам счастье. |
||||
11 июн 14, 13:48 [16154396] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Но не буду оказывать медвежью услугу |
||||||
11 июн 14, 13:57 [16154458] Ответить | Цитировать Сообщить модератору |
Джек Member Откуда: Сообщений: 574 |
sphinx_mv, спасибо за ответ, но мне нужно в запросе возвращать значение в поле выборки, а процедурой так не сделать. |
11 июн 14, 14:04 [16154522] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Тогда зачем вам INSERT да еще в другую таблицу ? |
||
11 июн 14, 14:05 [16154531] Ответить | Цитировать Сообщить модератору |
Джек Member Откуда: Сообщений: 574 |
Glory, у меня вот такой, примерно, запрос: select ... (select top1 f from myfunction(...) ) as pn ... from mytable в алгоритме myfunction не удалось(не хватает ума у меня) одним запросом набор сделать, поэтому создаются разные таблицы(переменные типа table) и в конце из них собирается выходной набор. Дак вот, когда один раз вызывается myfunction(...) она работает 1 секунду, а может и меньше, но в запрос с ней повисает, и видимо из-за этих локальных переменных таблиц, поскольку на них не ведётся статистика(нет плана запросов). Вот я и решил создать промежуточные наборы в базовых или временных таблицах(их в одной сессии видно). Но ни то, не другое sql мне сделать не даёт. |
11 июн 14, 14:56 [16154991] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
может вы приведете здесь текст myfunction(...) в том виде как он есть ? И вам быстрее помомуг написать нормальный запрос |
||
11 июн 14, 15:16 [16155202] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Джек, хотя бы индексы у функции догадались сделать? |
11 июн 14, 15:19 [16155229] Ответить | Цитировать Сообщить модератору |
sphinx_mv Member [заблокирован] Откуда: Сообщений: 1672 |
И что Вам мешает выполнить запрос (и даже не один) внутри хранимой процедуры? Получите Смотрите тут "Creating a simple Transact-SQL procedure". |
||
11 июн 14, 16:17 [16155805] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И вы думаете, что что-то поменяется, если вместо табличных переменных вы будете добавлять записи в постоянные таблицы ? |
||
11 июн 14, 17:03 [16156154] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Возьмите и научитесь.
Вы вместо того чтобы научится, пытаетесь всеми способами вставить кубик в круглое отверстие. И не важно что в голову приходят такие нелепости, противоречащие базовым основам скуля?! Или учиться или вам сюда. А теперь что у вас там не получается написать в одном запросе? А может лень переписать код? |
||||
13 июн 14, 02:01 [16160393] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |