Инкремент SQL Server 2008
У меня есть один стол
Table A (ID,RecNo, Old,New)
Table B (ID,AuditDate,Event)
Как я могу сделать приращение на RecNo стать 1,2,3
когда мой TableA.ID = TableB.ID
, Я делаю триггер аудита. Например, если я обновлю 3 поля в системе. TableA.ID
должен такой же как TableB.ID
и так как я обновляю 3 поля, предположим, что идентификатор равен 10, RecNo будет иметь 1,2,3
и сохраните старое и новое значение. Идентификатор будет автоматически увеличиваться каждый раз, когда происходит событие. Если есть другой идентификатор, RecNo начнется с 1 снова. Я пытался @recNo = @recNo + 1
но число продолжает прыгать. Любое руководство вы все знаете??
1 ответ
Я использовал SQL Server вместо триггера для этой задачи. Вот примеры сценариев SQL, надеюсь, они помогут
Я использовал временную таблицу в триггере SQL для получения правильных результатов, если оператор вставки вставляет более одной строки в одном выполнении
А функция SQL Row_Number используется для предотвращения выполнения более одной записи для одного и того же идентификатора в одном операторе.
Вы можете протестировать сценарии с помощью тех же инструкций INSERT, которые приведены ниже.
create table TableA (
ID int,
RecNo int,
Old int,
New int
)
create Trigger trg_TableAInsert on dbo.TableA Instead Of Insert
AS
Begin
Create Table #temp (id int, MaxRecNo int)
Insert Into #temp
Select distinct i.id, MAX(TableA.RecNo) OVER (Partition by i.ID)
From inserted i
LEFt JOIN TableA on i.ID = TableA.ID
Insert Into TableA (ID, RecNo, Old, New)
Select i.ID, ISNULL(#temp.MaxRecNo,0) + ROW_NUMBER() over (partition by i.id order by i.id), i.Old, i.New
From inserted i
inner join #temp on i.ID = #temp.ID
drop Table #temp
End
insert into tablea (id, old,new) values (1,1,2)
insert into tablea (id, old,new) values (2,1,2)
insert into tablea (id, old,new) select distinct id,9,10 from TableA
insert into tablea (id, old,new) select top 3 4,0,1 from tablea
select * from tablea