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

Откуда:
Сообщений: 54
добрый день
наверное я уже всем осточертел, но учиться надо

создаю 3 стола...
в одном TB_USER указаны пользователи, и номер их департамента, с помощью триггера который описан ниже программа автоматически из TB_USER берёт пользователей у которых номер департамента 2 и добавляет в таблицу Total сколько таких юзеров.


но также есть таблица TB_EVENT_LOG в которой описаны теже юзеры и столб closed в нём если значение 1 то пользователь ышел из здания, если 0 то он в здании.

можно ли в триггере объеденить эти 2 стола TB_EVENT_LOG и TB_USER так, чтобы в таблице Total программа автоматически держалабы и добавляла тех пользователей у которых в TB_USER департамент=2 а в TB_EVENT_LOG closed=0, а в случае если closed становится=1 то удалялась бы запись из из Total.

нужна таблица учёта пользователей на данный момент находящихся в здании, и относязихся к департаменту номер 2...

объеденить эти 2 таблицы не получится так как они уже существуют там множество информации и ещё много других столбцов. и система работает, просто понадобилось внести новую таблицу Total..

это система с бесконтактными картами, пропуска в здание...


надеюсь что объяснил хорошо.
прошу помочь




CREATE TABLE TB_EVENT_LOG
(
LOG_ID int Primary Key IDENTITY(1,1) NOT NULL,
nUserIdn int NOT NULL,
closed int NOT NULL,
)


CREATE TABLE TB_USER
(
[nUserIdn] int Primary Key IDENTITY(1,1) NOT NULL,
[nDepartmentIdn] [int] NOT NULL,
)


Create table Total
(
Administration int,
)



create trigger insert_update_total
on TB_USER after insert, update

as
begin

if (not(exists(select * from [INSERTED])))
return;

if (not(exists(
select * from dbo.TB_USER n
where (n.nDepartmentIdn=2)

)))
return;

update Total set Administration=Administration+'1' where (select nDepartmentIdn from inserted)=2;


end
go
21 июл 12, 12:50    [12896460]     Ответить | Цитировать Сообщить модератору
 Re: триггер с 3-мя таблицами  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
alex212121,

Таблица TB_EVENT_LOG, поле closed может принимать значения 1 или 0.
Значит тип у него должен быть bit или tinyint (некоторые программы bit по своему воспринимают).

Таблица TB_USER, поле nDepartmentIdn int Вы уверены, что у Вас может быть столько департаментов 2 147 483 647 ? Тип ставьте либо tinyint либо smallint

Таблица Total, поле Administration почему int ? Может tinyint либо smallint.

Разные типы данных занимают разное количество бит в базе.help
Поэтому, предложенные изменения не только уменьшат размер базы, но и разумно будет расходоваться оперативная память, когда Вы будете делать запросы к базе.

Зачем Вам триггеры, почему не подойдет SELECT из базы? Если не хватает поля Дата добавьте её.(тип smalldatetime)
21 июл 12, 19:52    [12897039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить