Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2014, 01:06   #1
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию Каждое 10 дней обновить запись в таблице

Здравствуйте ребята . СУБД MS SQL Server. Хочу чтобы каждого в 10 день обновилось в данных автоматический в таблице . и это логика отложить на сервере, виде (Хранимые процедуры или триггер) на пример ест таблица

Код:
create table tab7
(
 dt_priema datetime,
 cena money
)
добавляю запись

Код:
insert into tab7 (dt_priema, cena)
values('10.05.2013', '200')
insert into tab7 (dt_priema, cena)
values('21.11.2013', '250')
insert into tab7 (dt_priema, cena)
values('10.11.2013', '300')
insert into tab7 (dt_priema, cena)
values('12.11.2013', '150')
insert into tab7 (dt_priema, cena)
values('14.11.2013', '270')
Хочу что при SELECT проверял БД текущее дата ! и если текущее дата больше 10 дней на [ dt_priema ] тогда обновить поля [cena] на пример,

[ dt_priema ] [cena]
---------------------------------
14.11.2013 270

через 10 дней будет 24.11.2013 и обновить поля цена (270 + 5)

Вопрос : Для этого задачи ( Хранимые процедуры или триггер)
как это реализовать ? текущее дата MS SQL это GETDATE() . Узнать количество дней между ( [ dt_priema ] и текущее дата) можно так, да
Код:
select dt_priema, cena, DATEDIFF(DAY,dt_priema,GETDATE()) as [Day]
from tab7
Но , не додумал как это реализовать, чтобы каждое 10 дней обновилось запись в поле cena . Пожалуйста помогите как это реализовать
xxbesoxx вне форума Ответить с цитированием
Старый 05.01.2014, 01:36   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Это вам надо джоб(job) делать и расписание к нему

update tab7 set [cena] = [cena] + 5 where DATEDIFF(DAY,dt_priema,GETDATE()) > 9

Последний раз редактировалось eval; 05.01.2014 в 01:39.
eval вне форума Ответить с цитированием
Старый 05.01.2014, 01:58   #3
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

eval Спасибо за помочь . Но мне надо чтобы в каждого 10 дней + 5 . То есть , сколько 10 день прошел между " dt_priema и GETDATE() " добавить тот же 5 руб. Это запрос добавляет в 10 день 1 раз 5 руб
Код:
update tab7 set [cena] = [cena] + 5 where DATEDIFF(DAY,dt_priema,GETDATE()) > 9 
select * from tab7
Мне надо чтобы в каждого 10 дней он добавил 5 руб.
xxbesoxx вне форума Ответить с цитированием
Старый 05.01.2014, 11:32   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не стал бы так рисковать. Если что потом концов не найдёшь. Эту хитрую цену вычислял бы каждый раз в запросе. Примерно так
Код:
cena+5*(DATEDIFF(DAY,dt_priema,GETDATE())/10) as CalcCena
Лень в запросе каждый раз получать - можно впихнуть похожее в вычисляемый столбец непосредственно в таблице базы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.01.2014 в 11:48.
Аватар вне форума Ответить с цитированием
Старый 05.01.2014, 12:39   #5
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Аватар большое тебе человеческое СПАСИБО!!! да все правильно , лучше делать вычисление поля и потом дописать CREATE VIEW ........

Код:
create view Tab7_V
 as
select dt_priema, cena, cena+5*(DATEDIFF(DAY,dt_priema,GETDATE())/10) as CalcCena
from tab7
и SELECT делать на это представление
Код:
select *
from Tab7_V
Вот это да Еще раз огромное СПАСИБО Аватар
xxbesoxx вне форума Ответить с цитированием
Старый 05.01.2014, 12:49   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

С представлением есть один нюанс - каждый раз при обращении к нему создается виртуальная таблица. И если в запросе к нему есть условие ограничивающее выборку, то все это в совокупности будет медленнее, чем просто в запросе вычисляемое поле
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.01.2014, 15:49   #7
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Аватар Спасибо друг . Буду знать
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исключить запись в таблице. vlkr Microsoft Office Access 4 14.07.2012 16:38
Автовычисление и запись суммы в таблице zl@dey SQL, базы данных 1 07.02.2012 22:46
Чтение, запись, сортировка в таблице tresh PHP 1 30.04.2011 16:14
не могу сделать запись в таблице FAiver БД в Delphi 7 01.09.2010 14:59
Delphi:обновить данные в таблице. Raccoon Помощь студентам 5 19.05.2008 19:31