我不太精通 SQL 操作,希望获得一些帮助来完成我需要用代码完成的任务。我编写了一个基于云的应用程序,它可以访问包含测试结果的 SQL 表——设备 ID、序列号、测试结果等。
有一个用例,现场的某个人会激活一个菜单,在该菜单中更新此表。当更新设备测试结果表时,我想将 OLD 信息存储在设备测试历史表中。这样,我们就可以回头看看随着时间的推移发生了什么变化。
所以我需要从 TestedDevice
表中提取所有列,将它们插入到 TestedDeviceHistory
表中,并包含一些附加信息;当前日期和运算符(operator)的 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)
注意事项:
DeviceHistoryID
是一个IDENTITY
整数列,因此它对于历史表中的每个条目都是唯一的。CertificateID
在TestedDevices
表中是唯一的。它在历史表中应该不是唯一的。代码是用C# 4.5编写的
也许这是一个存储过程的情况,我从未尝试创建或使用它。或者,也许使用游标?不知道!这就是为什么我谦虚地请求更有 SQL 经验的人来帮助:)
最佳答案
不清楚是否只想将 Caller 和 RecordDate 分配给最近的记录,或者是否可以将其分配给所有历史记录。
对于所有记录,我相信你可以做类似的事情
SELECT *, @caller AS Caller, @date AS RecordDate INTO dbo.TestedDevicesHistory
FROM dbo.TestedDevices WHERE CertificateID=@cert
关于c# - 如何根据最高 IDENTITY 条目提取 SQL 表条目并更新两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26515481/