SQL Server : automatically add a unique identifier to all rows inserted at one time

标签 sql sql-server uniqueidentifier

以下 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。

请参阅下图以获取直观说明。

enter image description here

我认为 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/

相关文章:

mysql - SQL 多个 WHERE IN

c# - 如何使用 SQL COUNT(*) 读取条目数

javascript - KaiOS 功能手机的唯一设备标识

java - 使用JPA和Hibernate时如何选择id生成策略

mysql - sql select查询优化

mysql - 如何在 MySQL 中使用触发器创建审计跟踪或日志记录表

sql-server - SQL 按时间/小时过滤查询

sql-server - 无法调试 t-sql 语句 - 无法连接到计算机 '.'

sql - MS SQL Server - 如何从 CTE 创建 View ?

javascript - 我应该如何为一堆对象生成唯一的 ID?