Могу ли я вставить в разные базы данных в зависимости от запроса в SQLite? - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть две базы данных SQLite, подключенные к одному соединению: db1 и db2. У меня есть мнение, что ОБЪЕДИНЯЕТ таблицы из обеих баз данных и добавляет столбец «база данных», указывающий, из какой базы данных он получен. Я пытаюсь создать триггер при вставке в представление, которое вместо этого будет вставлено в правильную базу данных.

Представьте себе следующую схему для табличных данных:

id     INTEGER PRIMARY KEY,
parent INTEGER,
data   TEXT

Это будет схема для представления данных:

id       INTEGER PRIMARY KEY,
database TEXT,
parent   INTEGER,
data     TEXT

Что у меня так далеко:

CREATE TRIGGER DataViewInsertTrigger AFTER INSERT ON DataView
BEGIN 
    INSERT INTO database.Data 
        SELECT database
        FROM DataView
        WHERE id=new.parent 
END;

Возможно ли то, что я пытаюсь сделать? Если так, как бы я закончил курок?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

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

Тот факт, что у вас есть одно соединение, соединяющее два, не делает одно доступным для другого. Что произойдет, если вы отключите триггер из запроса, выполненного через соединение, которое загрузило только одну БД?

Возможно, вам нужны две таблицы в одной базе данных?

0 голосов
/ 06 июля 2012

Хотя Borealid верен, что сам триггер не может вставлять в другой файл, вы можете вызвать пользовательскую функцию sqlite, которая сама генерирует запрос для вставки в другой файл.

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