0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 24
1

Хранимая процедура для удаления

17.10.2015, 14:45. Показов 5245. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! У меня есть таблицы, которые заполнены сгенерированными данными. Нужно написать хранимую процедуру, суть которой в том, что если один и тот же сноуборд с одним и тем же id взяли в один период несколько раз ( то есть сноуборд уже в прокате, и его выдают еще раз), то удалить вторую запись. Подскажите, пожалуйста, с помощью чего реализовать, потому что никаких хороших идей нет. Заранее спасибо!
Миниатюры
Хранимая процедура для удаления  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2015, 14:45
Ответы с готовыми решениями:

Триггер или хранимая процедура для удаления?
Добрый день! Помогите, пожалуйста, написать хранимую процедуру или триггер для удаления информации...

хранимая процедура удаления
имеется процедура, она срабатывает, только вот данные не удаляются.. create procedure...

Хранимая процедура для добавления
Есть 2 базы. Из базы tmoplat нужно добавлять столбцы TERB_U и TERD_U в базу Service в столбец...

Хранимая процедура для доначисления
Доброго дня. Таблица: id_nahislenie int plochad int stoimost ...

8
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
17.10.2015, 19:21 2
Лучше не создавать вторую запись, чем потом удалять.
Добавление записей только через процедуру, ручную вставку закрыть.
В процедуре проверять ужевыданность доски в интересующий период.
В случае чего делать RAISERROR, в клиентском приложении обработать.
Модификацию тоже только через процедуру с проверкой.

голые id переименовать в id_prokat итд. Так удобнее писать запросы.

Альтернативный способ - можно триггер повесить на таблицу prokat, который будует проверять INSERT \ UPDATE (instead of), и если что генерировать исключение. То есть проверку унести в триггер. Но записывать лучше всё равно через процедуру.
1
3365 / 2061 / 736
Регистрация: 02.06.2013
Сообщений: 5,048
17.10.2015, 22:32 3
Возьмем пример:
 СноубордНачало прокатаКонец проката
1117.10.2015 10:0017.10.2015 11:00
2117.10.2015 10:3017.10.2015 12:00
3117.10.2015 11:3017.10.2015 13:00

Какие строки нужно удалить и почему?
1
0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 24
18.10.2015, 07:38  [ТС] 4
Цитата Сообщение от invm Посмотреть сообщение
Возьмем пример:
* Сноуборд Начало проката Конец проката
1 1 17.10.2015 10:00 17.10.2015 11:00
2 1 17.10.2015 10:30 17.10.2015 12:00
3 1 17.10.2015 11:30 17.10.2015 13:00
Какие строки нужно удалить и почему?
В моей базе наверное немного проще, там сноуборды выдаются на день или несколько дней, поэтому время не учитывается. Но разницы же особой нет?

Удаляем только вторую строку, так как сноуборд уже был взят, но его прокат еще не закончился(строка 1), и выдать в прокат мы его не можем. А 3-ю строку оставляем, потому что в 11-30 сноуборд уже находится в пункте проката и его можно выдавать.
0
1635 / 1136 / 171
Регистрация: 23.07.2010
Сообщений: 6,730
18.10.2015, 12:08 5
IMHO подход в корне не верный. Исторические данные на то и исторические данные, что бы их хранить. А уж позаботиться об оптимальной выборке - это уже совсем другой вопрос.
1
0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 24
18.10.2015, 13:16  [ТС] 6
Добавлено через 1 минуту
Цитата Сообщение от pincet Посмотреть сообщение
IMHO подход в корне не верный. Исторические данные на то и исторические данные, что бы их хранить. А уж позаботиться об оптимальной выборке - это уже совсем другой вопрос.
Знаю, но ситуация сложилась так, что нужно удалить из базы "неверные "записи. А в дальнейшем, да, реализую триггер на ввод данных для проверки возможности выдачи сноуборда.
0
3365 / 2061 / 736
Регистрация: 02.06.2013
Сообщений: 5,048
18.10.2015, 15:22 7
Лучший ответ Сообщение было отмечено Viktoria_t как решение

Решение

Цитата Сообщение от Viktoria_t Посмотреть сообщение
Удаляем только вторую строку, так как сноуборд уже был взят, но его прокат еще не закончился(строка 1), и выдать в прокат мы его не можем. А 3-ю строку оставляем, потому что в 11-30 сноуборд уже находится в пункте проката и его можно выдавать.
Одна из задач, где уместно воспользоваться курсором.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
declare @t table (id int identity primary key, s_id int, ds datetime, de datetime);
 
insert into @t
values
(1, '17.10.2015 10:00', '17.10.2015 11:00'),
(1, '17.10.2015 10:30', '17.10.2015 12:00'),
(1, '17.10.2015 11:30', '17.10.2015 13:00'),
(1, '17.10.2015 12:20', '17.10.2015 13:00');
 
declare t cursor local dynamic for
 select id, s_id, ds, de from @t order by s_id, ds;
 
declare @id int, @s_id int, @ds datetime, @de datetime, @c__s_id int, @c__ds datetime, @c__de datetime;
 
open t;
while 1 = 1
 begin
  fetch next from t into @id, @s_id, @ds, @de;
  if @@fetch_status <> 0
   break;
 
  if @c__s_id is null or @s_id <> @c__s_id or @ds not between @c__ds and @c__de
   select
    @c__s_id = @s_id, @c__ds = @ds, @c__de = @de;
  else
   delete from @t where id = @id;
 end;
close t;
deallocate t;
 
select * from @t;
1
0 / 0 / 0
Регистрация: 16.11.2013
Сообщений: 24
18.10.2015, 15:24  [ТС] 8
Цитата Сообщение от invm Посмотреть сообщение
Одна из задач, где уместно воспользоваться курсором.
Спасибо большое! Буду разбираться
0
1635 / 1136 / 171
Регистрация: 23.07.2010
Сообщений: 6,730
18.10.2015, 16:35 9
Цитата Сообщение от invm Посмотреть сообщение
Одна из задач, где уместно воспользоваться курсором.
но только как 1/2 взгляда на Солнце в телескоп. Не?
0
18.10.2015, 16:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2015, 16:35
Помогаю со студенческими работами здесь

Хранимая процедура для update
Всем привет, допустим у меня есть таблица, в которой 30 столбцов, не будешь же для каждого столбца...

Хранимая процедура для изменения скидок
Есть БД с двумя объектами Discounts и Goods. Необходимо создать хранимую процедуру для изменения...

Хранимая процедура для извлечения таблиц
Требуется создать интернет магазин. Планирую сделать через sql. Пишу корзину: При создании...

Хранимая процедура для создания рандомизированного иерархического списка
Здравствуйте, у меня есть хранимая процедура для создания рандомизированного иерархического списка...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru