9

我想执行许多这样的 SQL UPDATE 语句:

UPDATE cityd SET time_zone='-7.000000' WHERE locId = 173567;
UPDATE cityd SET time_zone='-8.000000' WHERE locId = 173568;
UPDATE cityd SET time_zone='-6.000000' WHERE locId = 173569;
UPDATE cityd SET time_zone='-5.000000' WHERE locId = 173570;
UPDATE cityd SET time_zone='-6.000000' WHERE locId = 173571;

我想优化事务时间,所以我需要使用 BEGIN TRANSACTION/COMMIT 对。如何在 SQLtite 管理器的 SQL 语法中编写这个?

编辑:当我在 SQLite Manager 中使用标准语法时,我收到此错误消息:“SQLiteManager: BEGIN TRANSACTION; [无法在事务中启动事务”

4

2 回答 2

19

根据SQL Documention,有两种支持的语法CASE

CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END

CASE WHEN x = w1 THEN r1 WHEN x = w2 THEN r2 ELSE r3 END

所以你的多个UPDATE语句可以进一步简化为

UPDATE  cityd
SET     time_zone = CASE locId
                        WHEN 173567 THEN '-7.000000'
                        WHEN 173568 THEN '-8.000000'
                        WHEN 173569 THEN '-6.000000'
                        WHEN 173570 THEN '-5.000000'
                        WHEN 173571 THEN '-6.000000'
                    END
WHERE   locId IN (173567, 173568, 173569, 173570, 173571)
于 2013-03-19T14:25:05.220 回答
1
BEGIN TRANSACTION;
.....YOUR SQL Statements here

COMMIT;
于 2013-03-19T14:14:16.647 回答