Код ниже SQL Server успешно вычисляет и вставляет ежемесячную оплату для всех сотрудников вместе с их номером staffID
и вставляет его в Tablepayroll
.SQL Server: автоматически добавляет уникальный идентификатор ко всем вставленным за один раз столбцам
INSERT INTO Tablepayroll (StaffID,Totalpaid)
(SELECT Tabletimelog.StaffID , Tabletimelog.hoursworked * Tablestaff.hourlypay
FROM Tabletimelog
JOIN Tablestaff ON
Tabletimelog.StaffID = Tablestaff.StaffID)
Однако, я хочу, чтобы иметь возможность также вставить batchID
, так что вы можете идентифицировать каждый раз выше вставка была запущена и записи, вставленные им в то время. Это означает, что все зарплаты сотрудников, рассчитанные в одно и то же время, будут иметь тот же номер batchID
. Каждый последующий batchID
должен просто увеличиваться на 1.
Для получения пояснения обратитесь к изображению ниже.
Я думаю, что Select MAX(batch_id) + 1
будет работать, но я не знаю, как включить его в операторе вставки.
Случайная мысль: создайте триггер, который вставляет одну запись во вторую таблицу с столбцом автоматического увеличения. Используйте это, чтобы отслеживать каждую партию. –
Я бы не использовал MAX (BatchID) + 1 или идею вставки записи в фиктивную таблицу. Вы должны смотреть в последовательности. https://msdn.microsoft.com/en-us/library/ff878091.aspx То, что вы описали, в точности соответствует тем, для каких последовательностей предназначены. –
Не будет ли хранить дату вставки намного более значимой, чем последовательность? Если вам нужно сгенерировать целое число из этого, вы можете использовать - 'Batch_id = DENSE_RANK() OVER (ORDER BY CreatedDate DESC)' – GarethD