如何根据最高IDENTITY条目提取SQL表条目并更新两列



我不太精通SQL操作,希望能在代码中完成一项任务。我写了一个基于云的应用程序,可以访问包含测试结果的SQL表——设备ID、序列号、测试结果等。

在一个用例中,字段中的某个人会激活一个菜单,在该菜单中会更新该表。当设备测试结果表更新时,我想将OLD信息存储在设备测试历史表中。通过这种方式,我们可以回到过去,看看随着时间的推移发生了什么变化。

因此,我需要从TestedDevice表中提取所有列,将它们插入到TestedDeviceHistory表中,并包含一些附加信息;当前日期和操作员id(这是仅在TestedDeviceHistory中找到的两个新列)

首先,我使用SELECT INTO命令,如下所示:

SELECT * 
INTO dbo.TestedDevicesHistory 
FROM dbo.TestedDevices 
WHERE CertificateID = @cert

然后我尝试这个(显然坏了)SQL命令:

UPDATE dbo.TestedDeviceHistory 
SET Caller = @caller, 
    RecordDate = @date 
WHERE DeviceHistoryID = MAX(DeviceHistoryID)

注:

  1. DeviceHistoryID是一个IDENTITY整数列,因此它对于历史表中的每个条目都是唯一的。

  2. CertificateIDTestedDevices表中是唯一的。它在历史记录表中不应是唯一的。

  3. 代码是用C#4.5 编写的

也许这是一个存储过程的情况,我从未尝试过创建或使用它。或者,也许是光标的使用?不知道!这就是为什么我谦虚地请求更有经验的SQL帮助:)

不清楚是否只想将Caller和RecordDate分配给最近的记录,或者是否可以将其分配给所有历史记录。

对于所有的记录,我相信你可以做一些类似的事情

SELECT *, @caller AS Caller, @date AS RecordDate INTO dbo.TestedDevicesHistory
FROM dbo.TestedDevices WHERE CertificateID=@cert

最新更新