2014-10-22 5 views
0

Это работает отлично:SQLite пакетные вставки в несколько таблиц

insert into Genres (ID, Genre) 
select 1 AS ID, 'Action' AS Genre 
union select 2, 'Adventure' 

... и это работает прекрасно:

insert into Movies_Genres (ID, MovieID, GenreID) 
select 1 AS ID, 2 AS MovieID, 1 AS GenreID 
union select 2, 3, 1 

... но когда я пытаюсь объединить эти два заявления:

insert into Genres (ID, Genre) 
select 1 AS ID, 'Action' AS Genre 
union select 2, 'Adventure' 
insert into Movies_Genres (ID, MovieID, GenreID) 
select 1 AS ID, 2 AS MovieID, 1 AS GenreID 
union select 2, 3, 1 

... это вызывает ошибку. Я также попытался разделить две таблицы на точку с запятой, но также получил ошибку. «Произошла ошибка при анализе предоставленного оператора SQL». И "синтаксическая ошибка". У меня есть большое количество вставок, чтобы сделать, так что мне нужно, чтобы максимально увеличить производительность, и я нашел этот подход очень надежный и быстрый:

How to insert multiple rows into a SQLite 3 table?

Итак, что такое правильный синтаксис для партии вместе куча вставки, предназначенные для разных таблиц?

+0

Используйте UNION ALL вместо UNION. –

+0

Как вы выполняете инструкции 'INSERT' для sqlite3? Если вы делаете это, используя метод, который ожидает один оператор, вы не сможете включать оба оператора 'INSERT' в одном представлении. –

ответ

1

Один оператор не может вставляться в несколько таблиц.

Просто выполните несколько инструкций. (Это будет быстро, если вы используете одну транзакцию.)

+0

sqlite не имеет разделителя партий (например, точки с запятой) для нескольких операторов? Все остальные платформы DB поддерживают это, поэтому я просто вычислил, что sqlite тоже. – HerrimanCoder

+0

У этого есть, но драйверы на многих языках/библиотеках не позволяют ему предотвращать инъекции. –

+0

У него работа; просто кажется странным, что вы не можете подгружать любую вставку, которую хотите, в любую таблицу в той же партии. – HerrimanCoder

Смежные вопросы