Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 менять значение поля по истечении срока договора  [new]
Тэй
Member

Откуда:
Сообщений: 79
Имеется таблица с договорами с покупателями.
на каждого покупателя(юр лицо) заведена учетка на сайте. Заказывать могут только те юр лица, у которых есть договор.

соответственно, по истечении договора нужно active = false пользователю сделать.
как это организовать?
25 дек 12, 13:18    [13682303]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Вычисляемое поле или вюшка
25 дек 12, 13:20    [13682329]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
В таблице пользователей завести ссылку на действующий договор. Дальше все элементарно.
25 дек 12, 13:26    [13682401]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Тэй
Member

Откуда:
Сообщений: 79
invm,
дальше констрейнт на поле?

вычисляемые поля вообще не хочется заводить....
25 дек 12, 14:37    [13683108]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
Тэй
invm,
дальше констрейнт на поле?

вычисляемые поля вообще не хочется заводить....
Вам предлагается проверять актуальность договора в SELECTах (в WHERE, например).
25 дек 12, 14:45    [13683198]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
Тэй,

Job, не?
25 дек 12, 14:54    [13683309]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Aleksey V.P.
Тэй,

Job, не?

Проверять актуальность договора в SELECTах надёжнее, т.к. джоб может и не отработать по какой-то причине.
25 дек 12, 15:04    [13683385]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Тэй
Member

Откуда:
Сообщений: 79
думала про jobы как раз. никогда не пользовала, имею лишь примерное представление. Хотела узнать, какие еще варианты.
25 дек 12, 15:20    [13683573]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Тэй
Member

Откуда:
Сообщений: 79
Гость333, где должны быть вышеуказанные селекты? допустим, сделала вьюху. но мне то в самой таблице нужно значения поменять
25 дек 12, 15:23    [13683613]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Aleksey V.P.
Member

Откуда: Москва
Сообщений: 575
Тэй
думала про jobы как раз. никогда не пользовала, имею лишь примерное представление. Хотела узнать, какие еще варианты.


В схеме делаешь ХП, которая занимается проверкой договора и изменением состояния клиента. Потом делаешь Job с 1 шагом (выполнение ранее написанной для этого ХП).
25 дек 12, 15:27    [13683654]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Тэй,

Вот более-менее универсальная болванка
create table dbo.Customers
(
 cust_id int not null primary key,
 ...
);
go

create table dbo.Contracts
(
 contr_id int not null primary key,
 contr_DateTill date not null,
 ...
 contr_IsActive as cast(case when contr.contr_DateTill <= getdate() then 1 else 0 end) as bit)
);
go

create table dbo.CustomerContracts
(
 cust_id int not null,
 contr_id int not null,
 ...
 primary key (cust_id, contr_id),
 foreign key (cust_id) references dbo.Customers (cust_id),
 foreign key (contr_id) references dbo.Contracts (contr_id)
);
go

create table dbo.ActiveCustomerContract
(
 cust_id int not null,
 contr_id int not null,
 ...
 primary key (cust_id),
 foreign key (cust_id, contr_id) references dbo.CustomerContracts (cust_id, contr_id)
);
go

create view dbo.vCustomers
as
select
 cust.cust_id,
 ...
 contr.contr_IsActive
from
 dbo.Customers cust left join
 dbo.ActiveCustomerContract actcc on actcc.cust_id = cust.cust_id left join
 dbo.Contracts contr on contr.contr_id = actcc.contr_id;
go
Если север 2008 и старше, то можно обойтись без ActiveCustomerContract. Можно и на более младших версиях обойтись, но способ, ИМХО, кривоват.
25 дек 12, 15:28    [13683668]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
kalimba
Member

Откуда:
Сообщений: 297
Тэй
думала про jobы как раз. никогда не пользовала, имею лишь примерное представление. Хотела узнать, какие еще варианты.


Сначала создаете хранимую процедуру, что-то типа:
UPDATE Clients
SET active = 0
FROM
    Clients c 
    INNER JOIN Contracts cn
        ON c.id_Client = cn.id_Client
WHERE CAST(cn.EndDate as date) = CAST(GETDATE() AS date)

Создаете джоб в SQL Server Agent, создаете в нем шаг с вызовом хранимой процедуры (EXEC имя процедуры) и назначаете расписание (например ночью каждый день). Как-то так.
25 дек 12, 15:39    [13683787]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Тэй
Member

Откуда:
Сообщений: 79
большое спасибо за исчерпывающие ответы, ребята, что помогаете новичкам))))) если б не этот форум, вообще б работа не шла)))
25 дек 12, 16:19    [13684187]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
Тэй
Гость333, где должны быть вышеуказанные селекты? допустим, сделала вьюху. но мне то в самой таблице нужно значения поменять
Строго говоря, это лишнее.
Вся нужная информация и так в таблице хранится.
Зачем ещё какое-то поле, которое ещё надо поддерживать в зависимости от изменений других полей?
25 дек 12, 16:25    [13684223]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
super-code
Member

Откуда:
Сообщений: 244
Тэй, а если active = false сделали, то не нужно срок договора на истекший заменить?
25 дек 12, 17:22    [13684658]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Guest4
Guest
invm
Если север 2008 и старше, то можно обойтись без ActiveCustomerContract. Можно и на более младших версиях обойтись, но способ, ИМХО, кривоват.

Подскажите, чем таким отличается 2008?
26 дек 12, 11:11    [13687134]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Guest4
invm
Если север 2008 и старше, то можно обойтись без ActiveCustomerContract. Можно и на более младших версиях обойтись, но способ, ИМХО, кривоват.

Подскажите, чем таким отличается 2008?
Наличием фильтрованных индексов.
26 дек 12, 12:00    [13687570]     Ответить | Цитировать Сообщить модератору
 Re: менять значение поля по истечении срока договора  [new]
Тэй
Member

Откуда:
Сообщений: 79
super-code,

нет, неактивным пользователь может стать в разных ситуациях. может отказаться работать через сайт и работать напрямую через менеджеров, например
26 дек 12, 16:19    [13690088]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить