你能在 SQlite Upsert 语句中为不同的 Where 条件链接多个 Do 语句吗
Can you Chain Multiple Do Statements for different Where Conditions in SQlite Upsert Statement
您好,我是 sqlite 的新手,我想在 SQLite 中使用一个更新插入命令 运行。这是 运行ning 在 C# 函数中的命令片段:
$@"INSERT INTO {table} (ToolType, TdxFolderPath, LastProcessedDateFolder,
LastProcessedTimeFolder, TdxFileName, LastTriedTimeStamp, Status, ErrorType, ErrorMessage, RetryCount)
Values (@ToolType, @TdxFolderPath, @LastProcessedDateFolder, @LastProcessedTimeFolder, @TdxFileName,
@LastTriedTimeStamp, @Status, @ErrorType, @ErrorMessage, @RetryCount)
ON CONFLICT (TdxFileName)
DO UPDATE SET ErrorType=excluded.ErrorType, ErrorMessage=excluded.ErrorMessage, RetryCount = RetryCount + 1
WHERE excluded.ErrorMessage = ErrorMessage
DO UPDATE SET ErrorType=excluded.ErrorType, ErrorMessage=excluded.ErrorMessage, RetryCount = 0
WHERE excluded.ErrorMessage != ErrorMessage";
table 变量是一个名为 'ErrorLog_Items' 的 table,对 id 和 TdxFileName 具有唯一性约束。如果文件名已经存在,我想对多个列进行更新。但是,如果文件名已经存在,我插入的错误消息可能与 table 中现有的错误消息相同。在这种情况下,我只想更新一些列并增加重试次数。
但是,如果新的错误消息与 table 中现有的错误消息不同,我想将重试计数重置为 0,同时更新上面命令中显示的某些列。
有没有一种方法可以在一次查询中执行此操作?还是需要多次查询?
您可以使用 CASE
表达式:
.....................................
ON CONFLICT(TdxFileName)
DO UPDATE SET ErrorType = excluded.ErrorType,
ErrorMessage = excluded.ErrorMessage,
RetryCount = CASE WHEN excluded.ErrorMessage = ErrorMessage THEN RetryCount + 1 ELSE 0 END
并且不需要 WHERE
子句。
您好,我是 sqlite 的新手,我想在 SQLite 中使用一个更新插入命令 运行。这是 运行ning 在 C# 函数中的命令片段:
$@"INSERT INTO {table} (ToolType, TdxFolderPath, LastProcessedDateFolder,
LastProcessedTimeFolder, TdxFileName, LastTriedTimeStamp, Status, ErrorType, ErrorMessage, RetryCount)
Values (@ToolType, @TdxFolderPath, @LastProcessedDateFolder, @LastProcessedTimeFolder, @TdxFileName,
@LastTriedTimeStamp, @Status, @ErrorType, @ErrorMessage, @RetryCount)
ON CONFLICT (TdxFileName)
DO UPDATE SET ErrorType=excluded.ErrorType, ErrorMessage=excluded.ErrorMessage, RetryCount = RetryCount + 1
WHERE excluded.ErrorMessage = ErrorMessage
DO UPDATE SET ErrorType=excluded.ErrorType, ErrorMessage=excluded.ErrorMessage, RetryCount = 0
WHERE excluded.ErrorMessage != ErrorMessage";
table 变量是一个名为 'ErrorLog_Items' 的 table,对 id 和 TdxFileName 具有唯一性约束。如果文件名已经存在,我想对多个列进行更新。但是,如果文件名已经存在,我插入的错误消息可能与 table 中现有的错误消息相同。在这种情况下,我只想更新一些列并增加重试次数。
但是,如果新的错误消息与 table 中现有的错误消息不同,我想将重试计数重置为 0,同时更新上面命令中显示的某些列。
有没有一种方法可以在一次查询中执行此操作?还是需要多次查询?
您可以使用 CASE
表达式:
.....................................
ON CONFLICT(TdxFileName)
DO UPDATE SET ErrorType = excluded.ErrorType,
ErrorMessage = excluded.ErrorMessage,
RetryCount = CASE WHEN excluded.ErrorMessage = ErrorMessage THEN RetryCount + 1 ELSE 0 END
并且不需要 WHERE
子句。