2013-03-19 2 views
4

Я хочу, чтобы выполнить много SQL UPDATE заявления, подобные этим:SQLITE насыпной 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 пару. Как написать это в синтаксисе SQL в SQLtite Manager?

Edit: Когда я использую стандартный синтаксис в SQLite Manager, я получаю сообщение об ошибке: "SQLiteManager: BEGIN TRANSACTION; [не может начать транзакцию, в рамках сделки"

+0

Таким образом, код, на котором запущены ваши SQL-запросы, уже создает транзакцию вокруг них. Таким образом, вам не нужно обертывать транзакцию вокруг них в этом случае ... –

ответ

0
BEGIN TRANSACTION; 
.....YOUR SQL Statements here 

COMMIT; 
+0

Когда я набираю это в SQLite Manager, я получаю эту ошибку: «SQLiteManager: BEGIN TRANSACTION; [не может начать транзакцию внутри транзакции» –

+1

Похоже, SQLiteManager по умолчанию запускает ваш SQls в транзакции, но я не уверен. –

9

По на 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) 
Смежные вопросы