以下 SQL Server 代码成功计算并插入所有员工的月薪及其 staffID
编号,并将其插入到 Tablepayroll
中。
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
可行,但我不知道如何将其包含在插入语句中。
最佳答案
您可以使用子查询从当前表中使用以下查询查找最新的 batch_id
:
INSERT INTO TablePayroll (StaffID, TotalPaid, batch_id)
SELECT T1.StaffID
, T1.HoursWorked * T2.HourlyPay
, ISNULL((SELECT MAX(batch_id) FROM TablePayRoll), 0) + 1 AS batch_id
FROM TableTimeLog AS T1
INNER JOIN TableStaff AS T2
ON T1.StaffID = T2.StaffID;
如您所见,我只需将 1 添加到当前的 MAX(batch_id)
即可。
顺便,学会使用别名。它会让你的生活更轻松
另一种解决方案是将您的 batch_id
作为 GUID,这样您就不必创建序列或从当前表中获取 MAX(batch_id)
。
DECLARE @batch_id UNIQUEIDENTIFIER = NEWID();
INSERT INTO TablePayroll (StaffID, TotalPaid, batch_id)
SELECT T1.StaffID, T1.HoursWorked * T2.HourlyPay, @batch_id
FROM TableTimeLog AS T1
INNER JOIN TableStaff AS T2
ON T1.StaffID = T2.StaffID;
关于SQL Server : automatically add a unique identifier to all rows inserted at one time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001334/