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

Откуда:
Сообщений: 329
Друзья озадачился такой задачей:
Есть таблица-справочник - хранилище строковой информации о пользователях, таких как имя, фамилия...
create [T_RefValuesStr]
(
    [id] int not null identity(1,1)
   ,[Value] nvarchar(200) not null --фамилия, имя, отчество...
   ,[ParameterID] tinyint not null  --идентификатор типа параметра из справочника: 1 - фамилия, 2 - имя...
   ,constraint [PK_T_RefValuesStr] primary key clustered([id])
)
create unique nonclustered index [idx_Main] on [T_RefValuesStr] ([Value],[ParameterID])

И есть таблица, содержащая набор сведений о пользователях:
create [T_UserDetails]
(
    [id] bigint not null identity(1,1)
   ,[UserID] int not null --ид пользователя из другого справочника
   ,[ParameterID] tinyint not null  --идентификатор типа параметра из справочника: 1 - фамилия, 2 - имя...
   ,[ValueID] int not null --идентификатор строки из справочника
   ,constraint [PK_T_UserDetails] primary key clustered([id])
)

Проверил на рабочих объёмах (сотни миллионов пользователей), сформировал справочник... всё нормально работает.
Теперь вопрос:
Хочу дополнить справочную таблицу полем [Count], чтоб хранить количество вхождений строк (потом придумаю зачем).
alter table [T_RefValuesStr] add [Count] int not null default(0)

Как реализовать инкремент [Count] в [T_RefValuesStr] на вставку строки в [T_UserDetails]?
20 сен 18, 16:35    [21681088]     Ответить | Цитировать Сообщить модератору
 Re: Обновление статистики при вставке  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
=Сергей=,

Так "инкримент" или "количество вхождений"

зы
автор
(потом придумаю зачем).

сначала устать потом думать зачем
20 сен 18, 16:59    [21681141]     Ответить | Цитировать Сообщить модератору
 Re: Обновление статистики при вставке  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
TaPaK
"инкримент" или "количество вхождений"

извините, "количество вхождений"

TaPaK
сначала устать потом думать зачем

не, просто чтоб не расписывать. Идея - откидывать непопулярные имена/фамилии, как, возможно, написанные с ошибкой.

Вот моя реализация, покритикуйте плиз, с триггерами не работал.
create trigger [dbo].[trigger_UserDetailsInsert]
   on [dbo].[T_UserDetails] after insert
as
begin
   update A
   set [Count] = A.[Count] + B.[Count]
   from [T_RefValueStr] A
   inner join (select [ValueID].[ParameterID],[Count] = count(*) from inserted group by [ValueID].[ParameterID]) B
      on B.[ValueID] = A.[id] and B.[ParameterID] = A.[ParameterID]
end

Вроде, работает ;)
20 сен 18, 17:08    [21681165]     Ответить | Цитировать Сообщить модератору
 Re: Обновление статистики при вставке  [new]
Serп
Member

Откуда:
Сообщений: 17
=Сергей=,

Судя по замыслу, особой оперативности здесь не нужно, мб, воткнуть апдейт в джоб и запускать в период наименьшей активности пользователей? Если хранить последний id из T_UserDetails, обработанный в прошлый раз, то необязательно будет просматривать T_UserDetails полностью.
20 сен 18, 17:39    [21681211]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить