Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/121: Рейтинг темы: голосов - 121, средняя оценка - 4.84
2 / 2 / 1
Регистрация: 23.01.2013
Сообщений: 52

Триггер на добавление

25.05.2013, 23:58. Показов 22497. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с триггером.Есть таблица:
договора (номер договора,код продавца, код недвижимости, код покупателя, вид оплаты, сумма, дата) или
contracts (id, sp_id, nedv_id, cust_id, vid_oplaty, sum_ob, data)

На добавление записи в эту таблицу написан триггер, который должен контроллировать, чтобы в таблицу договора не вносилась запись, если в ней указан объект недвижимости, который уже был продан (т. к. один объект может продаваться только один раз)
Вот триггер:
SQL
1
2
3
4
5
6
7
8
CREATE TRIGGER Ins
   ON  contracts
   FOR INSERT
AS 
DECLARE @nedv_id INT
SELECT @nedv_id=(SELECT nedv_id FROM inserted)
IF (@nedv_id = any (SELECT nedv_id FROM contracts))
ROLLBACK tran
При написании такого триггера вообще ни одна запись не вносится в таблицу, даже если такого кода недвижимости в таблице еще нет, пишется ошибка: транзакция завершилась в триггере выполнение пакета прервано
Подскажите пожалуйста, что не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2013, 23:58
Ответы с готовыми решениями:

Триггер на добавление
Есть таблица Договор(ID_Сделки, ID_Фирмы, ID_Кредита, Сумма, Процентная ставка, Дата выдачи, Срок (мес), Дата погашения) Необходимо...

Триггер на добавление
Доброго времени суток, уважаемые форумчани. Вообщем, есть 4 таблицы: create table пациент ( Номер_пациента int identity (1,1), ...

Триггер, реагирующий на добавление
Здравствуйте, дорогие форумчане. Существует вот такая база, подобие отеля (скриншот ниже). В таблице Bron хранится id клиета, id комнаты,...

8
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
26.05.2013, 11:05
Вы используете триггер FOR INSERT -он срабатывает после вставки записи. Вам необходимо следить за ситуацией когда в таблице contracts 2-е записи с одинаковым nedv_id:
T-SQL
1
2
3
4
5
6
7
8
CREATE TRIGGER Ins
   ON  contracts
   FOR INSERT
AS 
DECLARE @nedv_id INT
SELECT @nedv_id = nedv_id FROM inserted
IF EXISTS(SELECT nedv_id FROM contracts WHERE nedv_id = @nedv_id GROUP BY nedv_id HAVING COUNT(nedv_id ) > 1)
ROLLBACK tran
0
2 / 2 / 1
Регистрация: 23.01.2013
Сообщений: 52
26.05.2013, 12:45  [ТС]
asd24, спасибо большое, теперь все работает!
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
26.05.2013, 13:51
Цитата Сообщение от Яна44 Посмотреть сообщение
asd24, спасибо большое, теперь все работает!
Что работает? Вон тот говнокод? Не смешите.
Попробуйте вставить две записи одним INSERTом. Или больше.
Сколько из них подвергнутся проверке, как думаете?
0
2 / 2 / 1
Регистрация: 23.01.2013
Сообщений: 52
26.05.2013, 14:00  [ТС]
iap, Я работаю через приложение в делфи, так что две записи сразу никак не вставятся. Так что мне вариант этого триггера подходит
1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
26.05.2013, 14:06
Цитата Сообщение от Яна44 Посмотреть сообщение
iap, Я работаю через приложение в делфи, так что две записи сразу никак не вставятся. Так что мне вариант этого триггера подходит
Гарантируете, да?
Сервер обязан корректно обработать любой допустимый запрос любого клиента вообще-то.


- Гиви, докажи теорему Пифагора.
- Мамой клянус!
©
0
2 / 2 / 1
Регистрация: 23.01.2013
Сообщений: 52
26.05.2013, 14:15  [ТС]
iap, ну хорошо, какой тогда вы предлагаете вариант?
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
26.05.2013, 14:44
Цитата Сообщение от Яна44 Посмотреть сообщение
iap, ну хорошо, какой тогда вы предлагаете вариант?
1. выкинуть из триггера все скалярные переменные.
2. использовать таблицу inserted в запросах триггера.
0
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
26.05.2013, 17:53
Цитата Сообщение от iap Посмотреть сообщение
Что работает? Вон тот говнокод? Не смешите.
Попробуйте вставить две записи одним INSERTом. Или больше.
Сколько из них подвергнутся проверке, как думаете?
А у вас что ТЗ на руках есть? А может есть необходимость вставлять только по одной записи и не больше? (судя по первоначальном триггеру так и есть)
Сделаем через JOIN без переменных - ой какие мы крутые программисты! Заодно и дыру в безопасности создадим..
Спасибо за внимание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2013, 17:53
Помогаю со студенческими работами здесь

Простой триггер на добавление
Добрый день. Пытаюсь создать триггер на добавление записи. Хочу при добавлении записи в таблицу 1 добавить эту же (новую) запись и во...

Триггер на добавление дубликата
Всем доброй ночи! Ребят, помогите разобраться с триггером... Необходимо при запросе на добавление записи проверить, есть ли она, если...

Триггер на добавление/обновление данных
У меня есть три таблицы: Рационы, Продукты и Учет продуктов. Необходимо просчитать Стоимость рациона в день. Она высчитывается следующим...

Триггер на добавление скидки к повторяющейся записи
Написал триггре USE GO /****** Object: Trigger . Script Date: 10/04/2014 13:32:36 ******/ SET ANSI_NULLS ON GO SET...

Триггер на добавление, проверяющий значения в другой таблице
Есть 2 таблицы. Первая таблица: ид/ид_материала 1/1 2/(х) Вторая таблица: ид/материал


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru