Можно сделать поле ToggleLine = NULL в зависимости от значения поля IdGeometryType?(SQL) Сделать дефолтное значение с условием

У меня есть таблица PanoramaObj: введите сюда описание изображения

Можно автоматически делать поле ToggleLine = NULL, если IdGeometryType != 0? если равен IdGeometryType == 0; ставить дефолтное значение false.

Тип ToggleLine - Bool, который может быть NULL


Ответы (1 шт):

Автор решения: Сабир Исламов

В тегах к вопросу отмечена СУБД sqlite. По этому я могу предложить решение этой задачи в рамках возможности именно этой СУБД. Но с учетом, что эта СУБД не является строго типизированной СУБД, то значения false и NULL как таковые для неё ничего не значат. По этому что бы выполнить ваше условие вопроса они взяты в кавычки, что сама sqlite интерпретирует как строковые константы. И так, сначала создаем таблицу и нужный триггер:

CREATE
    TABLE PanoramaObj (
        idGeometryType INTEGER,
        ToggleLine BOOLEAN DEFAULT "false"
);

CREATE TRIGGER ToggleLine_Change
AFTER INSERT ON PanoramaObj FOR EACH ROW
BEGIN
    UPDATE PanoramaObj SET ToggleLine = "NULL" WHERE idGeometryType != 0;
END;

Затем наполняем таблицу тестовыми кортежами:

INSERT INTO PanoramaObj (idGeometryType) VALUES (1);
INSERT INTO PanoramaObj (idGeometryType) VALUES (0);
INSERT INTO PanoramaObj (idGeometryType) VALUES (5);
INSERT INTO PanoramaObj (idGeometryType, ToggleLine) VALUES (0, "true");

В результате получаем таки записи:

SELECT * FROM PanoramaObj;

idGeometryType|ToggleLine
1|NULL
0|false
5|NULL
0|true

При этом этот триггер, как видно из выборки не мешает задавать и true в записях, если не выполняется условие !=0

P.S: вашу огромную таблицу пришлось для примера сократить :)

P.P.S: И если делать выборку уже из существующей базы с неправильно расставленным полем TogleLine, то можно это делать через представление примерно вот так:

CREATE VIEW PanoramaObj_view AS
    SELECT
        idGeometryType,
        CASE WHEN idGeometryType != 0 THEN "NULL" ELSE "true" END
            AS ToggleLIne
    FROM PanoramaObj;
→ Ссылка