SQL:如何删除和更新 table 中的记录,与 (Q)List 数据同步以减轻 database/table 的负担?

SQL: How to remove & update records in a table, sync'ing with a (Q)List data in order to decrease the burden on database/table?

我在 Windows7 OS.
上使用 Qt 和 MS-Sql 服务器 我有一个 MS-SQL 数据库,我用它来存储 data/info 来自安装在某些车辆上的设备。
在名为 TransactionFilesInfo 的数据库中有一个 table - 当设备连接到 TCP 服务器时,一个 table 用于存储有关设备交易文件的信息。
我们使用此 table 是因为我们被要求避免 重复 文件。当远程设备在将交易文件发送到服务器后不删除交易文件时,(有时)会发生这种情况。因此,我使用 table 中的信息来检查 [size and CRC] 以避免下载 重复项
TransactionFilesInfo table 的一些示例数据如下所示

[TransactionFilesInfo]:    
DeviceID    FileNo  FileSequence    FileSize    FileCRC  RecordTimeStamp
10203       2       33              230         55384    2015-11-26 14:54:15
10203       7       33              624         55391    2015-11-26 14:54:15
10203       2       34              146         21505    2015-11-26 14:54:16
10203       7       34              312         35269    2015-11-26 14:54:16
10203       2       35              206         23022    2015-11-26 15:33:22
10203       7       35              208         11091    2015-11-26 15:33:22
10203       2       36              134         34918    2015-11-26 15:55:44
10203       7       36              104         63865    2015-11-26 15:55:44
10203       2       37              140         35466    2015-11-26 16:20:38
10203       7       37              208         62907    2015-11-26 16:20:38
10203       2       38              134         17706    2015-11-26 16:38:33
10203       7       38              104         42358    2015-11-26 16:38:33
11511       2       21              194         29913    2015-12-02 16:22:59
11511       7       21              114         30038    2015-12-02 16:22:59

另一方面,每次设备连接到服务器时,它首先发送文件信息列表。 Qt 应用程序会处理这个问题。
该列表包含这样的元素

struct FileInfo
{
    unsigned short  FileNumber;
    unsigned short  FileSequence;
    unsigned short  FileCRC;
    unsigned long   FileSize;
}; 

因此,作为 示例(受上述 table 启发)连接的设备 (DeviceID=10203) 可能会说它具有以下文件:

QList<FileInfo> filesList;
// here is the log4qt output...
filesList[0] --> FileNo=2 FileSeq=33 FileSize=230 and FileCRC=55384
filesList[1] --> FileNo=2 FileSeq=34 FileSize=146 and FileCRC=21505
filesList[2] --> FileNo=7 FileSeq=33 FileSize=624 and FileCRC=55391 
filesList[3] --> FileNo=7 FileSeq=34 FileSize=312 and FileCRC=35269 ...    

好吧,我需要的是一种方法remove/delete,对于给定的DeviceIDTransactionFilesInfo table中的所有记录,不在table中的记录远程设备发送的列表。因此,我将能够减轻数据库的负担(大小)table。

备注:目前我只是删除(@midnight)所有超过10天的记录,基于RecordTimeStamp字段。因此,table 的大小不会增加到令人担忧的水平:)

最后,稍微澄清一下:我主要需要 SQL 方面的帮助。然而,我不会拒绝关于如何在 Qt 方面做一些相关的 things/tricks 的任何想法 ;)

删除这些记录的 SQL 可能看起来像这样:

DELETE FROM [SAMPLE DATA] 
WHERE DeviceID = 10203 
    and 'File' + CONVERT(varchar(11),FileNo) + '_' + 
        RIGHT('000' + CONVERT(varchar(11),FileSequence),3) 
        NOT IN ('File2_033','File2_034','File7_033','File7_034',...)

如果你想为一个设备删除所有这些,你可以删除查看 FileNo 和 FileSequence 的代码,所以它很简单:

DELETE FROM [SAMPLE DATA] 
WHERE DeviceID = 10203