我正在开发一个基于C#.NET(& TSQL)的项目,该项目需要生成可配置的串行跟踪号,这取决于它所包含的数据。
详细说明,该软件用于跟踪进入工厂的车辆。为每辆车分配一张RFID卡和一个跟踪号码。跟踪号基于卡车前往的许多仓库的第一。管理员可以配置每个仓库的编号格式。这通常如下所示:#YYYYMMDD-XX002211
其中XX
是每个仓库唯一的前缀。每当月份发生变化时,此数字将从1 重新开始。
在创建主人(车辆+ RFID卡详细信息)时,跟踪编号为null
。添加第一行(仓库详细信息)后,系统会生成跟踪编号并将其分配给主服务器。因此,在添加一行之前,跟踪号字段可能有重复,即许多记录null
。
生成跟踪号的代码是用C#编写的,并使用SQL事务,但跟踪中偶尔会发生冲突,导致系统不稳定。我对TSQL事务进行了更多的研究,以找到Isolation Level settings但是我没有成功使用它们。
我尝试了以下方法:
我应该吗?
感谢您的帮助!
答案 0 :(得分:1)
为简单起见,我建议你让一个存储过程更新并获取序列号,然后用C#进行其他格式化
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)
)