我正在从事一个基于C# .NET (& TSQL)的项目,该项目需要生成可配置的序列跟踪编号,这取决于它包含的数据。
背景
为了详细说明,该软件用于跟踪进入工厂的车辆。每个车辆被分配一个RFID卡和一个跟踪号码。跟踪号码是基于第一的许多仓库,卡车要前往。管理员可以为每个仓库配置数字的格式。这通常如下所示:#YYYYMMDD-XX002211,其中XX是每个仓库的唯一前缀。每当月份发生变化时,这个数字将从1重新启动。
在主控(车辆+射频识别卡详细信息)创建时,跟踪号码是null。一旦添加了第一行(仓库详细信息),系统就会生成一个跟踪号码,并将其分配给主程序。因此,在添加一行之前,跟踪编号字段可以有重复的,即使用null的多个记录。
问题所在
生成跟踪号的代码是用C#编写的,使用的是SQL事务,但是跟踪中很少发生冲突,这会导致系统不稳定。为了找到隔离级别设置,我对TSQL事务做了更多的研究,但是我没有成功地使用它们。
解决办法?
我尝试了以下方法:
我应该吗?
谢谢你的帮忙!
发布于 2015-05-26 03:22:53
为了简单起见,我建议您使用单个存储过程来更新并获取序列号,然后使用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)
)https://stackoverflow.com/questions/30448739
复制相似问题