Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:如何删除&;更新表中的记录,同步';是否使用(Q)列表数据来减少数据库/表的负担?_Sql_Sql Server_List_Qt_Qsqlquery - Fatal编程技术网

SQL:如何删除&;更新表中的记录,同步';是否使用(Q)列表数据来减少数据库/表的负担?

SQL:如何删除&;更新表中的记录,同步';是否使用(Q)列表数据来减少数据库/表的负担?,sql,sql-server,list,qt,qsqlquery,Sql,Sql Server,List,Qt,Qsqlquery,我正在Windows7操作系统上使用Qt和MS Sql Server。 我拥有一个MS-SQL数据库,用于存储来自某些车辆上安装的设备的数据/信息。 数据库中有一个名为TransactionFilesInfo的表,该表用于存储设备连接到TCP服务器时的事务文件信息。 我们使用此表是为了避免重复文件。当远程设备在将事务文件发送到服务器后不删除事务文件时(有时)。因此,我使用表中的信息检查[大小和CRC]以避免下载重复项。 交易文件信息表的一些示例数据如下所示: [TransactionFilesI

我正在Windows7操作系统上使用Qt和MS Sql Server。
我拥有一个MS-SQL数据库,用于存储来自某些车辆上安装的设备的数据/信息。
数据库中有一个名为
TransactionFilesInfo
的表,该表用于存储设备连接到TCP服务器时的事务文件信息。
我们使用此表是为了避免重复文件。当远程设备在将事务文件发送到服务器后不删除事务文件时(有时)。因此,我使用表中的信息检查
[大小和CRC]
以避免下载重复项。
交易文件信息表的一些示例数据如下所示:

[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
struct FileInfo
{
    unsigned short  FileNumber;
    unsigned short  FileSequence;
    unsigned short  FileCRC;
    unsigned long   FileSize;
}; 
另一方面,每次设备连接到服务器时,它首先发送一个文件信息列表。Qt应用程序会处理这个问题。
列表包含如下元素:

[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
struct FileInfo
{
    unsigned short  FileNumber;
    unsigned short  FileSequence;
    unsigned short  FileCRC;
    unsigned long   FileSize;
}; 
因此,作为一个示例(受上表启发),连接的设备(
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 ...    
QList文件列表;
//这是log4qt输出。。。
filesList[0]-->FileNo=2 FileSeq=33 FileSize=230和FileCRC=55384
filesList[1]-->FileNo=2 FileSeq=34 FileSize=146和FileCRC=21505
filesList[2]->FileNo=7 FileSeq=33 FileSize=624和FileCRC=55391
filesList[3]-->FileNo=7 FileSeq=34 FileSize=312和FileCRC=35269。。。
嗯,我需要的是一种方法来删除/删除,对于给定的
DeviceID
TransactionFilesInfo
表中的所有记录,这些记录不在远程设备发送的列表中。因此,我将能够减少数据库表的负担(大小)

备注:目前我只是根据
RecordTimeStamp
字段删除(@午夜)所有超过10天的记录。因此,表的大小不会增加到令人震惊的程度:)


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

删除这些记录的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 

您没有提供足够的信息来给出完整的答案,但是如果您正在寻找一些可以构建的SQL来删除这些记录,那么它可能是这样的:
delete FROM[SAMPLE DATA],其中DeviceID=10203和'File'+CONVERT(varchar(11),FileNo)+'''++RIGHT('000'+CONVERT(varchar(11),FileSequence),3)不在('File2_033'、'File2_034'、'File7_033'、'File7_034'、…)
为了提供完整的描述,我应该添加哪些其他信息?你的直觉很好:我的Qt技能还行,但我缺乏SQL和相关知识……所以,是的:你的答案很有用。为什么你把它作为评论而不喜欢答案?反正我投了赞成票,明天我会尝试在我的Qt应用程序中实现你的想法(我现在不在办公室……)。我想我只是不熟悉什么是QT,但它似乎是您的开发语言。在您的问题中,定义这其中的哪一部分需要帮助会很有帮助。例如,您是否需要一些SQL或代码来解析log4qt输出中的文本,然后将标记限制在这一范围内。如果您更具体,您将获得更多帮助请看这个链接。答案很简单:我主要需要SQL方面的帮助。但我不会拒绝任何关于如何在Qt方面做一些相关事情/技巧的想法。顺便说一句:Qt是一个跨平台应用程序框架,用于使用GUI(在C++中)开发应用程序软件.而且…log4qt只是一个愚蠢的日志记录器,不需要麻烦…当列表为空时,我假设您希望删除DeviceID的所有日志。在这种情况下,只需将SQL更改为只使用
其中DeviceID=???