Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 33
1

Реализовать триггер

06.06.2014, 15:13. Просмотров 1081. Ответов 6
Метки нет (Все метки)

Имеем таблицу Номер(Код_номера, код_категории), каждый номер имеет свою Категорию(Код_категории, Категория, Количество_мест), например Люкс, Двухместный и так далее. Есть таблица Регистрация, куда мы добавляем данные о заселенных номерах(Код_регистрации, Код_номера, Заезд, Выезд). Как можно триггером сделать так, чтобы мы могли заселять клиента в зависимости от вместимости номера.

Вот я написал запрос, который выводит все номера, которые не до конца заполнены. То есть я считаю сколько раз один и тот же номер присутствует в таблице регистрация, и сравниваю с вместимостью номера.
SQL
1
2
3
4
5
SELECT Регистрация.Код_номера AS Номер, Количество_мест AS [Всего мест], COUNT(Регистрация.Код_регистрации) AS [Свободно мест]
FROM Регистрация, Номер, Категория 
WHERE Регистрация.Код_номера=Номер.Код_номера AND Номер.Код_категории=Категория.Код_категории 
GROUP BY Регистрация.Код_номера, Количество_мест 
HAVING  COUNT(Регистрация.Код_регистрации)<Количество_мест
Помогите, пожалуйста, справится с этой нелегкой задачей.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2014, 15:13
Ответы с готовыми решениями:

Реализовать триггер
всем привет, прошу подсказать, что я сделал не так. задача сделать триггер, который, при update...

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это...

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это...

Реализовать триггер на вставку данных в таблицу и на модификацию данных
Всем привет..с трудом дается тема триггеры ))запросы пишу хорошо,а вот с ними проблема... Дана...

6
1310 / 942 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
07.06.2014, 13:19 2
Цитата Сообщение от lenka911 Посмотреть сообщение
Как можно триггером сделать так, чтобы мы могли заселять клиента в зависимости от вместимости номера.
Никак.

Триггер реагирует на события, связанные с его таблицей (insert, update, delete).
Единственное что можно сделать с его помощью - это заблокировать добавление информации в таблицу Регистрация, если номер на дату заезда еще не освобожден.
При этом - количество мест "Двухместный" непригодно для анализа заполненности номера.
Кроме того, в таблице Регистрация не указано, сколько человек регистрируется.
0
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 33
07.06.2014, 15:58  [ТС] 3
Вот моя реализация триггера, нельзя заселить клиента в номер, если нет свободных мест, может кому и пригодится:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TRIGGER limitRoom
   ON  Регистрация
   FOR INSERT
AS 
DECLARE
@nedv_id INT, 
@заезд DATE, 
@выезд DATE 
SELECT @nedv_id = Код_номера, @заезд=Заезд,  @выезд=Выезд
FROM inserted 
IF EXISTS(SELECT Регистрация.Код_номера,Количество_мест 
FROM Регистрация, Номер, Категория 
WHERE Регистрация.Код_номера = @nedv_id 
AND Регистрация.Код_номера=Номер.Код_номера 
AND   Заезд>=@Заезд 
AND Выезд<=@Выезд 
AND Номер.Код_категории=Категория.Код_категории  
GROUP BY Регистрация.Код_номера, Количество_мест
HAVING COUNT(Регистрация.Код_номера)>Количество_мест)
ROLLBACK tran
Добавлено через 41 минуту
Также здесь учитывается дата поселения клиента.
0
1310 / 942 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
07.06.2014, 20:18 4
lenka911, не говоря уже о возможности одновременного добавления нескольких строк, -- как вы планируете регистрировать нового бедолагу? По очереди тыкать его во все номера до тех пор, пока триггер не прекратит генерировать ошибку?
0
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 33
07.06.2014, 21:57  [ТС] 5
Напишу специальный запрос, который будет показывать какие номера частично заняты на определенную дату, и какие номера освободятся после определенной даты и в каких вообще никто не живет. Я новичок в этом деле, прошу не судить строго.
0
2879 / 1762 / 617
Регистрация: 02.06.2013
Сообщений: 4,353
07.06.2014, 22:54 6
Лучший ответ Сообщение было отмечено lenka911 как решение

Решение

Добавить в таблицу Номер столбцы Количество_мест (можно использовать значение из одноименного столбца таблицы Категория как базовое) и Занято_мест. Повесить check constraint: Количество_мест > 0 and Занято_мест >= 0 and Занято_мест < Количество_мест.
Соответсвенно, при заселении увеличивать Занято_мест, при выселении - уменьшать.
0
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 33
07.06.2014, 23:04  [ТС] 7
Точно, большое спасибо попробую реализовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2014, 23:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать счетчик ч
Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать...

Как реализовать триггер (MySQL выдает ошибку)
Надо сделать вот такой триггер, но mysql выдает ошибку. Не подскажете что не так? create trigger...

Реализовать триггер, обеспечивающий при удалении ограничение целостности
Здравствуйте,уважаемые! Никак не могу разобраться с триггером...уже весь интернет перерыл(...

Народ, как реализовать простой код перемещения N объектов, когда зашел в 2D триггер
Народ, помогите начинающему проекту (в вк можете найти Studio New Vector). В общем сам почти один,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.