powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновление статистики при вставке
4 сообщений из 4, страница 1 из 1
Обновление статистики при вставке
    #39705729
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья озадачился такой задачей:
Есть таблица-справочник - хранилище строковой информации о пользователях, таких как имя, фамилия...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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])


И есть таблица, содержащая набор сведений о пользователях:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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], чтоб хранить количество вхождений строк (потом придумаю зачем).
Код: sql
1.
alter table [T_RefValuesStr] add [Count] int not null default(0)


Как реализовать инкремент [Count] в [T_RefValuesStr] на вставку строки в [T_UserDetails]?
...
Рейтинг: 0 / 0
Обновление статистики при вставке
    #39705743
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=,

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

зы
автор(потом придумаю зачем).
сначала устать потом думать зачем
...
Рейтинг: 0 / 0
Обновление статистики при вставке
    #39705751
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK"инкримент" или "количество вхождений"
извините, "количество вхождений"

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

Вот моя реализация, покритикуйте плиз, с триггерами не работал.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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


Вроде, работает ;)
...
Рейтинг: 0 / 0
Обновление статистики при вставке
    #39705764
Serп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
=Сергей=,

Судя по замыслу, особой оперативности здесь не нужно, мб, воткнуть апдейт в джоб и запускать в период наименьшей активности пользователей? Если хранить последний id из T_UserDetails, обработанный в прошлый раз, то необязательно будет просматривать T_UserDetails полностью.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновление статистики при вставке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]