首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可配置串行跟踪号码生成

可配置串行跟踪号码生成
EN

Stack Overflow用户
提问于 2015-05-26 02:58:40
回答 1查看 647关注 0票数 1

我正在从事一个基于C# .NET (& TSQL)的项目,该项目需要生成可配置的序列跟踪编号,这取决于它包含的数据。

背景

为了详细说明,该软件用于跟踪进入工厂的车辆。每个车辆被分配一个RFID卡和一个跟踪号码。跟踪号码是基于第一的许多仓库,卡车要前往。管理员可以为每个仓库配置数字的格式。这通常如下所示:#YYYYMMDD-XX002211,其中XX是每个仓库的唯一前缀。每当月份发生变化时,这个数字将从1重新启动。

在主控(车辆+射频识别卡详细信息)创建时,跟踪号码是null。一旦添加了第一行(仓库详细信息),系统就会生成一个跟踪号码,并将其分配给主程序。因此,在添加一行之前,跟踪编号字段可以有重复的,即使用null的多个记录。

问题所在

生成跟踪号的代码是用C#编写的,使用的是SQL事务,但是跟踪中很少发生冲突,这会导致系统不稳定。为了找到隔离级别设置,我对TSQL事务做了更多的研究,但是我没有成功地使用它们。

解决办法?

我尝试了以下方法:

  • 在更新之前,请检查母版表中是否有可能重复。
  • 使用可重复读取隔离级别,以确保在事务执行期间不更新数据

我应该吗?

  • 把整件事都转移到存储过程上?
  • 启动一个守护进程,它负责生成数字,通过单线程执行来确保顺序。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 03:22:53

为了简单起见,我建议您使用单个存储过程来更新并获取序列号,然后使用C#进行其他格式化。

代码语言:javascript
复制
CREATE PROCEDURE GetSequenceOfWareHouse
    @WareHouse char(2)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @Result table (Sequence int)

    BEGIN Tran
        UPDATE SequenceTable SET Sequence = Sequence + 1 
            OUTPUT inserted.Sequence INTO @Result 
        WHERE WareHouse = @WareHouse AND Month = YEAR(GETDATE()) * 100 + MONTH(GETDATE())

        IF NOT EXISTS(SELECT * FROM @Result)
            INSERT SequenceTable (Sequence, WareHouse, Month) 
                OUTPUT inserted.Sequence INTO @Result 
            VALUES (1, @WareHouse, YEAR(GETDATE()) * 100 + MONTH(GETDATE()))

    COMMIT Tran

    SELECT Sequence FROM @Result

END
GO


CREATE Table SequenceTable
(
    Sequence int,
    WareHouse char(2),
    Month int,

    unique (Sequence, WareHouse, Month)
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30448739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档