小编Sam*_*bey的帖子

在 Sqlite 3.34 中执行 UPSERT 时出错 - 错误:靠近“DO”:语法错误

我正在尝试将每日 CSV 加载文件加载到main表中,以便插入所有新记录并更新所有现有记录。我正在使用UPSERTSqlite 的功能来实现此目的。

这是我的 shell 脚本。


LOAD_FILE="/tmp/main.csv"
LOAD_TABLE="tbl_tmp_main"
MAIN_TABLE="tbl_main"
COLUMNS="t_id, t_col1, t_col2"


CREATE_TABLE_QUERY="DROP TABLE IF EXISTS $LOAD_TABLE; CREATE TABLE $LOAD_TABLE AS SELECT $COLUMNS FROM $MAIN_TABLE WHERE false"
LOAD_TABLE_QUERY=".separator ','\n.import '$LOAD_FILE' $LOAD_TABLE"
UPSERT_TABLE_QUERY="
    INSERT INTO $MAIN_TABLE($COLUMNS) SELECT $COLUMNS FROM $LOAD_TABLE
    ON CONFLICT(t_id) DO UPDATE
    SET
        t_col1 = excluded.t_col1,
        t_col2 = excluded.t_col2
    ;
"

echo ""
echo "$CREATE_TABLE_QUERY" | sqlite3 mydatabase.sqlite3            # <-- This works
echo "[INFO] Temporary Table Created."

echo "$LOAD_TABLE_QUERY" | sqlite3 mydatabase.sqlite3              # <-- …
Run Code Online (Sandbox Code Playgroud)

sqlite upsert insert-update

2
推荐指数
1
解决办法
952
查看次数

标签 统计

insert-update ×1

sqlite ×1

upsert ×1