如何实现记录组的标识?

时间:2017-02-27 14:20:28

标签: c# sql-server

我有一个包含非主键RequestID的表。当我执行bulkInsert时,所有记录必须具有相同的RequestID 。但是,如果我执行另一个BulkInsert,下一个插入的行必须增加RequestID

  

NewRequestID = PreviousRequestID + 1

到目前为止我找到的唯一解决方案 - 我不喜欢它 - 是在插入新记录之前每次都获得最后一条记录。

为什么我不喜欢这种方法?因为数据库应该是关系型的,这意味着“没有特定的顺序”。此外,我没有主键或日期订购。

实施此方法的最佳方法是什么?

(我添加了c#标签,因为我使用EF。如果有一个简单的解决方案,EF)

1 个答案:

答案 0 :(得分:1)

您可以采取多种不同的方法:

  • 您是否确保您的RequestID始终递增?如果是这样,您可以查询表中最大的RequestID,并且应该代表“最后一个插入。”
  • 您可以在应用程序的某个位置跟踪状态,但在服务失败/重新启动的情况下这可能很危险(除非在外部跟踪状态)。
  • 假设您可以控制架构,如果您不想更新您所说的特定表架构,您可以创建另一个表来跟踪最后使用的RequestID,并从那里检索它(这将保护您反对服务重启/失败)。

这些是我想到的一些。

更新:

假设RequestID不是特定类型的标识符,您可以使用时间戳 - 当您执行新批处理时,它将始终递增,但是,我不确定您是否需要它始终以'1'递增'这将排除这种方法。

相关问题