powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Нумерация строк
3 сообщений из 28, страница 2 из 2
Нумерация строк
    #39624990
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilovDarkMaster,

Плохо даже если действие в одной транзакции? Я про MSSQL 2012

Ну а подумать? Например у тебя 10 клиентов, заполняющих что-то там. Стартуем у каждого транзакцию - получаем 10 транзакций - у каждого клиента своя транзакция. Делаем SELECT MAX(). Получаем у КАЖДОГО клиента одинаковое значение для MAX(). Дальше обьяснять?
...
Рейтинг: 0 / 0
Нумерация строк
    #39624998
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откройте для себя каунтеры и "select from final table".
И транзакции блокирующие не понадабятся.
...
Рейтинг: 0 / 0
Нумерация строк
    #39625759
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Понятно. К счастью эта вещь у меня стоит не для айдишника а для отображаемы номеров, один раз в год совпадет не страшно, и к тому же создают их не так часто. Хотел на более многочисленные документы поставить, теперь ещё подумаю. У меня раньше этот номер был уникальным в пределах года. И каждый год начинался с 1. Теперь наверное лучше всего сохранять и сам год в отдельном поле таблицы заголовков документов и поставить по этой паре полей уникальный индекс. В очень редких случаях будет вылетать с ошибкой ключа, не страшно. Это наверное 2-3 раза в год будет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE UNIQUE NONCLUSTERED INDEX [NonClusteredIndex-20180404-215712] ON [dbo].[RetProvActN]
(
	[ActN] ASC,
	[NYear] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
go

create TRIGGER [dbo].[RetProvActN_FOR_INSERT]
   ON  [dbo].[RetProvActN]
   FOR INSERT
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	DECLARE @ActN int, @Y int
	set @Y = Year(GetDate())
	Select @ActN=isnull(Max(ActN),0) from RetProvActN where Year(D_Reg)=@Y  

    update RetProvActN SET D_Reg = GetDate(), ActN=i.N, NYear = @Y
    from RetProvActN d join
	(
	select i.ID, i.idVer, @ActN + Row_Number() OVER (ORDER BY i.ID asc) N  
	from RetProvActN d join	
        INSERTED i on d.ID = i.ID
	) i
	
    on d.ID = i.ID

END
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Нумерация строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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