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

时间:2015-07-04 10:07:03

标签: c# sql sql-insert

我已经构建了一个RFID Race Timing系统并且运行良好,但现在我需要插入或更新tblMovement条目。

插入时我必须使用tagID,movementDate,checkDate。 movementDate是实际的标签读取时间。 checkDate用于我的防冲突功能。插入时必须将movementDate放入@ Lap1。

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

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

1 个答案:

答案 0 :(得分:1)

不是有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,比赛日期等。

所有这一切,如果您真的想继续支持您当前的结构,可以向[CurrentLap]添加TblMovement字段。始终将您的单圈时间插入该区域。在表上设置UPDATE触发器,将该值移动到其中一个@lap字段中,该字段将填充