我不太精通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)
注:
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