Как обновить и выбрать строку в одном запросе в SqLite? - PullRequest
4 голосов
/ 17 декабря 2009

Я хочу обновить и выбрать одну строку в одном запросе в SqLite. В MySql мой разыскиваемый запрос будет выглядеть так:

SET @update_id := -1;
UPDATE data SET `Status` = 'running', Id = (SELECT @update_id := Id) 
  WHERE `Status` = 'scheduled' LIMIT 1;
SELECT * FROM data WHERE id=@update_id;"

Приведенный выше запрос установит для Status значение «running» и значение переменной @ update_id для Id модифицированной строки для первой строка, которая имеет Status «запланировано» и использует переменную @ update_id для извлечения полной измененной строки.

Важным моментом является то, что мне нужно выбрать строку, которую я изменил с помощью инструкции UPDATE

Но, насколько мне известно, SqLite не поддерживает переменные.

Как запрос MySQL сверху можно переписать для SqLite?

Ответы [ 2 ]

4 голосов
/ 17 декабря 2009

Вам необходимо объявить и использовать переменные в любой программе, которую вы пишете, которая выполняет операторы SQLite .

К счастью, вы можете использовать связывание переменных в SQLite :

//1.  Fetch the id into whatever language you are using:
SELECT id FROM DATA WHERE status = 'scheduled' LIMIT 1;

//2. Retrieve the id value from Step 1's resultset
int id = [id value from the resultset];

//3. Construct the update statement
parsed_sql_stmt stmt = parse_sql(UPDATE DATA SET STATUS = 'running' WHERE ID = ?);

//4. Execute update statement
exec_stmt(stmt, id);

//5. Select everything in the DATA table for that record
stmt = parse_sql(SELECT * FROM DATA WHERE id = ?);
exec_stmt(stmt, id);

Шипсимулятор прав - это три отдельных утверждения.

1 голос
/ 17 декабря 2009

Ответ на этот вопрос зависит от того, где вы выполняете код.

Если вы хотите использовать переменные в интерфейсе командной строки для SQLite, нет, переменные сеанса отсутствуют. Тебе не повезло.

Если вы хотите использовать переменные при подключении к базе данных SQLite через официальный C ++ API (или какой-либо другой API), вам необходимо использовать нотацию bind variable (см. 3.0 страница).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...