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搜索查询运行良好,它根据结果更新或插入。我最大的挑战是扫描每一列,看看哪一列有数据。我有源代码,但对于这个窗口来说太多了。。。。。
与其有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字段中,根据该字段填充