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

Откуда: Минск
Сообщений: 407
Подскажите, как из триггера запустить хранимую процедуру с передачей ей параметров? Как в процедуре описать входящую переменную? Использую SQL 2005 Express. Заранее большое спасибо, желательны примеры кода
26 авг 13, 09:55    [14754309]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
aleks2
Guest
Заранее пожалуйста.

Пойди подучиться, чтоле?
Или книжку почитай.
Там и примеры ё.
26 авг 13, 10:01    [14754338]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
И еще вопрос как процедуре передать результаты запроса (много целочисленных данных)
26 авг 13, 10:01    [14754342]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Slash232
И еще вопрос как процедуре передать результаты запроса (много целочисленных данных)
Описали бы хоть задачу с примером. Может это? Массивы и Списки в SQL Server
26 авг 13, 10:15    [14754390]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Суть в чём: есть таблица. При вставке в неё записей Код, Количество и т.п. запускается триггер который приложен к это таблице. В триггере для каждой вставленной или удаленной записи из таблицы запускается хранимая процедура с параметром (это либо Код либо набор записей типа Код в зависимости от количества вставляемых записей) и уже в процедуре идёт обработка всех записей в которых этот Код или наборы Кодов участвуют. Подскажите как это лучше реализовать и если можно примеры
26 авг 13, 10:50    [14754596]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Slash232
Суть в чём: есть таблица. При вставке в неё записей Код, Количество и т.п. запускается триггер который приложен к это таблице. В триггере для каждой вставленной или удаленной записи из таблицы запускается хранимая процедура с параметром (это либо Код либо набор записей типа Код в зависимости от количества вставляемых записей) и уже в процедуре идёт обработка всех записей в которых этот Код или наборы Кодов участвуют. Подскажите как это лучше реализовать и если можно примеры
Лучше всю обработку делать напосредственно в триггере без всяких ХП.
В конце концов, триггер - это просто специальный вид процедуры.
По крайней мере, не придётся копировать deleted и inserted,
а это могут быть таблицы с миллионом записей каждая!
26 авг 13, 10:58    [14754649]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
iap, загвоздка в том что таких триггеров много и в каждом один и тот же сценарий обработки данных, поэтому и решил что все они будут скидывать данные в одну процедуру
26 авг 13, 11:02    [14754676]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Slash232
iap, загвоздка в том что таких триггеров много и в каждом один и тот же сценарий обработки данных, поэтому и решил что все они будут скидывать данные в одну процедуру
Неправильно решили
26 авг 13, 11:04    [14754689]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Slash232, курсором передай
:D
26 авг 13, 11:09    [14754717]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
* передайте

прошу пардону
26 авг 13, 11:09    [14754720]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
И всё таки хочется понять как в триггере сделать так чтобы перебрать все вставленные записи, извлечь из каждой Код и для каждой строки запустить процедуру с параметром Код???
26 авг 13, 11:27    [14754788]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
Slash232,

ну надо так надо... Открываете курсор по таблице INSERTED, считываете нужные данные в переменные, которые и передаёте в цикле курсора процедуре, закрываете курсор, освобождаете ресурсы. Вроде ничего не забыл...
26 авг 13, 11:50    [14754924]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
Slash232,

Курсоры
26 авг 13, 11:52    [14754933]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
declare c1 CURSOR is select [Код товара] from inserted
for rec1 IN c1 LOOP
execute prRecalculation rec1.[Код товара]
end loop
end
close c1

Что не так делаю?
26 авг 13, 12:15    [14755067]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
оракл что-ли?
Guest
Slash232,

у вас точно MS SQL Server?
26 авг 13, 12:18    [14755085]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
оракл что-ли?, да SQL 2005 Express
26 авг 13, 12:29    [14755161]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Slash232
оракл что-ли?, да SQL 2005 Express
в смысле SQL 2005 Express а не оракл, я только начинаю изучать
26 авг 13, 12:30    [14755172]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Гость333
Member

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

А откуда тогда такой синтаксис взяли? Который, кстати, не валиден ни в Oracle, ни в MSSQL. Может, в каком-то другом диалекте SQL он и правилен, не знаю.
26 авг 13, 12:34    [14755193]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
Slash232
Member

Откуда: Минск
Сообщений: 407
Гость333, Подскажите как правильно написатЬ?
26 авг 13, 12:45    [14755247]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Slash232
Гость333, Подскажите как правильно написатЬ?
Я, крнечно, не гость, но если Вы упорствуете,
то надо создать временные таблицы #deleted и #inserted,
заполнить их из deleted и inserted соответсвенно,
вызвать процедуру, внутри которой происходит работа с таблицами #deleted и #inserted.
Курсоров и других построчных обработок надо всячески избегать.
Главный тормоз в предложенном варианте - это копирование во временные таблицы.
Поэтому ещё раз говорю: одумайтесь!
26 авг 13, 12:57    [14755322]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Slash232
И всё таки хочется понять как в триггере сделать так чтобы перебрать все вставленные записи, извлечь из каждой Код и для каждой строки запустить процедуру с параметром Код???

- перебрать все вставленные записи: курсор по псевдотаблице INSERTED
- извлечь из каждой Код: SELECT или FETCH
- для каждой строки запустить процедуру с параметром Код: EXEC
26 авг 13, 16:26    [14756543]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Господа, скиньте скрипт красивого цикла с одним FETCH, недавно натыкался вот здесь где-то, но помедитировать над структурой не успел, хочу вернуться, по моему там даже без GOTO было.
26 авг 13, 16:31    [14756581]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Прошу прощения что немного не в том топике, но коль уж речь зашла про курсор)
26 авг 13, 16:32    [14756590]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
invm
Member

Откуда: Москва
Сообщений: 9405
ambarka_max
по моему там даже без GOTO было.
declare c cursor local fast_forward for
 select ... from ...;

open c;

while 1 = 1
 begin
  fetch next from c into ...;
  if @@fetch_status <> 0
   begin
    ...
    break;
   end;

  ...
 end;
26 авг 13, 16:44    [14756670]     Ответить | Цитировать Сообщить модератору
 Re: Работа с триггерами  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
invm
ambarka_max
по моему там даже без GOTO было.
declare...

Спасибо, кажется оно, как я вижу расплачиваемся лишними операторными скобками и брэйком) Как вариант, как вариант.
26 авг 13, 16:54    [14756746]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить