![]() |
|
Модераторы: Akina |
![]()
|
|
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: нет Всего: 65 |
Приветствую всех.
Уважаемые повелители SQL, просветите несмышленого студента. Имею хранимую процедуру для вставки записи в таблицу содержащую данные об израсходованных материалах.
Так вот здесь есть поле aantal - количество, израсходованного материала. И мне бы очень хотелось добавить в данную хранимую процедуру инструкцию, которая бы выполнила Update в таблице содержащей данные о материале на складе. В частности, из поля в котором хранится данные о количестве товара на складе, вычесть значение переменной @aantal и сохранить получившийся остаток. Вот так выглядит моя хранимая процедура для update всех данных о материале на складе.
И тут меня интересует поле Voorraad - запас. Его надо уменьшить на величину переменной @aantal из первой ХП и сохранить. Надеюсь никого не запутал и понятно обьяснил что мне надо. Навсякий случай повторюсь. Хочеться в одной ХП выполнить два действа: - вставить строку в одну таблицу; - уменьшить значение поля в другой таблице на величину, записываемую в первую таблицу, и сохранить получившееся значение во второй таблице. Заранее спасибо. ЗЫ понимаю что это должно быть не очень сложно, для тех кто знает. Но я пока еще учусь и еще этого не знаю. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
SET Voorraad = Voorraad - @aantal
|
|||
|
||||
| under_sun |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: 5 Всего: 17 |
Можно через триггер, который обновляет поле Voorraad в таблице tblArtikel при добывлении в таблицу tblWerkbonDetail:
--------------------
TMTOWTDI |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: нет Всего: 65 |
under_sun,
Приветствую. Возможно с триггером будет более правильно. Но я еще с ними не работал никогда. И совершенно не представляю как их создавать и как и откуда вызывать. Например про UDF знаю что, ее можно вызвать только из Хранимой процедуры, а не из приложения которое работает с базой. Потому, прошу пояснить про ваш триггер. Где его вызывать? Или он сам срабатывает? Как он срабатывает? Пока вот в конце концов написал такую ХП(в виду не значительного знания предмета, проблемы с синтаксисом)
-------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| under_sun |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: 5 Всего: 17 |
Триггер - это хранимая процедура, которая срабатывает автоматически при удалении, добавлении или изменении данных в таблице.
В триггере автоматически создаются две таблицы, deleted - при удалении, и inserted - при добавлении ( или обе при update ), которые содержат соответсвенно удаленные или добавленные строки. Так в моем примере те записи которые мы добавляем в таблицу tblWerkbonDetail, содержатся в inserted, и в тиргере автоматически выполняется update таблицы tblArtikel при каждой вставке. --------------------
TMTOWTDI |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: нет Всего: 65 |
under_sun,
Приветствую. Если я правильно понял, то мне надо: - приведенный тобой выше код сохранить в текстовый файл с расширением sql; - и выполнить его в Management Studio на моем сервере, создав тем самым в моей БД триггер. И потом при каждом добавлении строк в таблицу tblWerkbonDetail будет автоматически срабатывать этот триггер, изменяя остаток заданного материала в таблице tblArtikel. А то что я добавил в ХП нужно убрать. Добавлено через 56 секунд ЗЫ подскажи где бы что почитать более подробно о создании и использовании триггеров. Добавлено через 12 минут и 10 секунд Похоже мне не судьба воспользоваться триггерами в моей БД. У меня MS SQL EXPRESS server 2005. В моей БД в разделе программирование есть раздел триггеры базы данных. Но в контекстном меню есть только один пункт - "обновить" Тогда как для ХП или UDF есть пункт "создать". Сделал скриптик с твоим кодом, добавил туда кого юзать. Попытался его выполнить. Студия открылась, соеденилась с сервером, проверила синтаксис скрипта, осталась довольна. Выполнила скрипт, отрапортовала что все прошло удачно. Но триггер в БД не добавился. Слушай ... обидно ... -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| under_sun |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: 5 Всего: 17 |
http://msdn2.microsoft.com/ru-ru/library/ms203721.aspx Возможно, эта документация уже была установлена вместе с сервером.
Никогда раньше этого не замечал, но в Management Studio почему-то триггеры не отображаются
--------------------
TMTOWTDI |
||||||
|
|||||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: нет Всего: 65 |
under_sun,
Приетствую.
Попробовал еще раз выполнить скрипт по созданию триггера, студия ругнулась, заявила что такой обьект уже есть. Получаеться триггер все же создан. BOL я себе отдельно поставил. Начинаю просматривать что там есть и почитывать. Надо бы еще по Intuit.ru полазить, может там есть лекции и по MS SQL. А то есть необходимость более подробно изучить возможности ХП, UDF и триггеров. А так же администрирование доступа к серверу и бд соответственно. Спасибо за помощь. С наилучшими пожеланиями -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Killerman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Так всетаки, вы уже выяснили как в экспрессе добавлять триггеры? Подскажите если знаете. А то эта тема какая то нездоровая.
|
|||
|
||||
| metis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 29.1.2008 Репутация: нет Всего: нет |
Триггер вешается на конкретную таблицу, добавить его можно не в разделе программирования, а в разделе tables, кликаешь по + рядом с нужной таблицей, там будет вкладка Triggers.
|
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |