嗨,我是 sqlite 的新手,并且有一個 Upsert 命令,我正在嘗試在 SQLite 中運行。這是在 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";
表變數是一個名為“ErrorLog_Items”的表,對 id 和 TdxFileName 具有唯一性約束。如果檔案名已經存在,我想對幾個列進行更新。但是,如果檔案名已經存在,我插入的錯誤訊息可能與表中現有的錯誤訊息相同。在這種情況下,我只想更新一些列并增加重試計數。
但是,如果新的錯誤訊息與表中現有的錯誤訊息不同,除了更新上面命令中所示的某些列之外,我還想將 retrycount 重置為 0。
有沒有辦法在一個查詢中做到這一點?還是需要多次查詢?
uj5u.com熱心網友回復:
你可以用一個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條款。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/401095.html
標籤:C# sqlite 案件 插入 系统数据.sqlite
上一篇:與Django模型的表關系
