![]() |
|
Модераторы: Akina |
![]()
|
|
| lBugl |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.8.2009 Репутация: нет Всего: 2 |
есть 2 таблицы:
User -- int PK id, varchar(20) User, int kol User_copy -- in PK id, varchar(20) Name, int kol пишу триггер на insert в User. при добавлении в User проверяю если такой записи нет в User_copy, то добовляю её туда. Если Запись в User_copy с таким именем уже существует, то обновляю в User_copy поле kol (добавляю новое значение User_copy.kol + User.kol). проблема в том, что заноситься удвоенное значение User.kol, объясните пожалуйста почему trigger:
и так после запроса
таблица User содержит: 1 -- user1 -- 3 Таблица User_copy 1 -- user1 -- 6
таблица User содержит: 1 -- user1 -- 3 1 -- user1 -- 1 Таблица User_copy 1 -- user1 -- 8 где еррор?... =))) пока писал пост исправил ошибку в цикле перед fetch next добавил set @kol = 0. всё работает правильно теперь. только всё равно не очень понятно, почему значение удваивалось. мб это из-за того что триггер выполняется после insert`a но не очень понятно как это влияет на таблицу inserted. в общем в чём тут дело?=) |
||||||
|
|||||||
| Akina |
|
||||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Добавлено через 2 минуты и 29 секунд или
Добавлено через 3 минуты и 16 секунд
Математически - правильно. Логически - более чем неправильно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
| lBugl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.8.2009 Репутация: нет Всего: 2 |
кажется въехал... спасиб.
вижу, что у меня цикл делал один лишний круг. сначала пробовал читать потом добавлял. и потом только проверял правильно ли прочитал... кстати это не упрощается? мб можно без курсора сделать |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
|
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Конечно можно... просто выполни два запроса, сначала типа
ЗЫ. ПисАл наскоро, мог ошибиться - но идея, думаю, понятна. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| lBugl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.8.2009 Репутация: нет Всего: 2 |
да, идея понятна.
в новом варианте выполняется два запроса. в моём случае, тоже два, но в цикле... отсюда вопрос: таблица inserted содержит новые записи (которые должны добавиться в исходную таблицу) может ли inserted содержать более 1 записи? ведь запрос insert куда-то, что-то добавляет только одну запись, и на каждый такой запрос, я так понимаю, будет вызваться триггер на инсерт, где и проверяется содержание inserted. зы: хочется понять какой вариант оптимальней и правильно ли я себе представляю работу триггера и inserted |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Если ты вставляешь не по одной записи, а несколько - то и в таблице будет несколько строк. На один insert триггер вызывается 1 раз, и в inserted ему передаются все вставляемые строки. Добавлено через 7 минут и 14 секунд А вообще вместо того, чтобы задавать такие вопросы, лучше один раз вдумчиво прочитать документацию. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| lBugl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.8.2009 Репутация: нет Всего: 2 |
да, посмотрел что инсертом можно вставлять сразу несколько строк. лично как-то не доводилось это делать.
ещё раз спасиб за помощь. |
|||
|
||||
![]()
|
| Правила форума "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. |