C#SQL Insert语句-如果第一列中有文本插入到下一列中

本文关键字:一列 文本 插入 Insert 如果 C#SQL 语句 | 更新日期: 2023-09-27 18:00:58

我已经构建了一个RFID竞赛计时系统,所有系统都运行良好,但现在我需要插入或更新tblMovement条目。

插入时,我必须使用tagID、movementDate、checkDate。movementDate是实际的标记读取时间。checkDate用于我的防碰撞功能。插入时,必须将movementDate放入@Lap1中。

更新时,我必须找到标签ID,并检查@Lap1、@Lap2、@Lap3、@Lap4或@Lap5是否有数据。如果@Lap3有数据,那么我必须插入@Lap4等

查找tagID的SQL搜索查询运行良好,它根据结果更新或插入。我最大的挑战是扫描每一列,看看哪一列有数据。我有源代码,但对于这个窗口来说太多了。。。。。

C#SQL Insert语句-如果第一列中有文本插入到下一列中

与其有5圈时间,不如将其分解为一个规范化的结构。这意味着有一个tblMovementLaps表,具有以下结构。

CREATE TABLE dbo.tblMovementLaps(
    [Id] INT NOT NULL IDENTITY(1,1),
    [TagId] INT NOT NULL,
    [MovementDate] DATETIME NOT NULL,
    [CheckDate] DATETIME NOT NULL
)

每次比赛开始时,你都会在tblMovement中插入一条新记录,每次记录新的圈数时,你会在tblMovementLap中插入一个新记录。然后你会加入到两人之间来回顾一场比赛,其中包括:

SELECT *
FROM [tblMovement] TM
    JOIN [tblMovementLaps] TML
    ON TM.[TagId] = TML.[Id]
ORDER BY TML.[Id] ASC

这样做的一大好处是,它可以让你记录无限圈数的比赛,而不会破坏你的结构或将你的运动表扩展到越来越多的列中。此外,它还可以让你在运动表中保留空间,用于每个比赛真正唯一的信息(标准化的基础(,如参赛者ID、比赛日期等。

尽管如此,如果您真的想继续支持当前的结构,可以在TblMovement中添加一个[CurrentLap]字段。始终将你的圈速插入该字段。在表上设置一个UPDATE触发器,将该值移动到一个@lap字段中,根据该字段填充