Могу ли я использовать CASE WHEN вне SELECT в SQLite / условную структуру в SQLite? - PullRequest
0 голосов
/ 14 мая 2019

В SQL Server я могу использовать условную структуру IF для выполнения некоторых операторов, если условие истинно.Согласно this и this , в SQLite такой структуры, похоже, нет.

Я хочу проверить, существует ли таблица, если она существует, ничего не делать,если нет, делайте много вещей, включая создание таблиц, вставку и удаление данных из других таблиц, а также обновление:

CASE WHEN ((SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'TraitsSwap') = 1) THEN
    -- 50 lines of code, including CREATE, DROP, INSERT, DELETE and UPDATE statements, with random() in used
ELSE
    -- Do nothing
END

Могу ли я в любом случае добиться этого?Код включает использование random() и требует согласованного результата (т. Е. Только случайного в первый раз).Прошу прощения, если это звучит неразумно, но это в контексте моддинга игры, поэтому я не могу реально изменить внутренний код для запуска кода отдельной транзакции.

Я думаю, что может быть альтернативойесли в SQLite есть функция, которая может выполнить блок строки / оператора и вернуть результат.Для этого я могу преобразовать запрос в

SELECT CASE WHEN ((SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'TraitsSwap') = 1) THEN
    ExecuteCode("Code; RETURN 1;")
ELSE
    0
END

Я пытался

SELECT CASE WHEN ((SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'TraitsSwap') = 1) THEN
    SELECT 1;
    INSERT INTO Foo(Test) VALUES("");
    SELECT "A";
ELSE
    SELECT 1;
    SELECT 2;
    SELECT "A";
END

, но это не удалось, ошибка

рядом с "ВЫБРАТЬ":синтаксическая ошибка: SELECT CASE WHEN ((SELECT COUNT (*) FROM sqlite_master WHERE type = 'table' AND name = 'TraitsSwap') = 1) THEN SELECT

...