Предполагая, что вы знаете, какой дистрибутив извлечь из Таблицы1, вы можете динамически определить версию, которую следует использовать, например:
Insert Table2( VersionId, ProjectId, AccountDistributionId, AccountId, Percent )
Select Coalesce(
(
Select Max(VersionId)
From Table1 As T1
Where T1.Id = T.Id
), 0) + 1 As VersionId
, ProjectId, AccountDistributionId, AccountId, Percent
From Table1 As T
Where ProjectId = 12345
And AccountDistributionId = 1
Что касается определения "любого нового дистрибутива", который является более жестким и зависит от того, как определяется "новый".
Сложение
Вы спрашивали о том, как определить, что набор изменился. Одним из решений является сохранение хеша значений в распределении Аккаунта при его сохранении. Так что-то вроде:
Update AccountDistributions
Set AccountHash = HashBytes('SHA1'
, (
Select '|' + Cast(AccountId As varchar(10)) + '|' + Cast(Percent As varchar(30))
From Table1 As T1
Where T1.AccountDistributionID = AccountDistributions.Id
Order By T1.AccountId, T1.Percent
For Xml Path('')
))
Затем вы можете использовать это, чтобы определить, изменился ли какой-либо элемент набора. Другое решение заключается в обновлении значения DateTime в родительской таблице всякий раз, когда происходит изменение набора, и записи того же значения в Table2. Затем вы можете сравнить последний DateTime с DateTime в родительской таблице, чтобы определить, изменилось ли что-либо.