2016-03-03 1 views
2

я следующий файл БД (DB1.db) содержит только одну таблицу:Sqlite: Создать новую таблицу для результатов запроса и сохранить оригинальную схему,

sqlite> .dump 
PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE CARS (ID INT KEY NOT NULL, COMPANY CHAR(20) NOT NULL, COLOR CHAR(10) NOT NULL); 
INSERT INTO "CARS" VALUES(111,'Hyundai','White'); 
INSERT INTO "CARS" VALUES(222,'BMW','Black'); 
INSERT INTO "CARS" VALUES(333,'Toyota','Blue'); 
COMMIT; 

Для того, чтобы присоединиться между двумя таблицами в двух разных базах данных прилагаю DB1.db (и другой БД) в DB2.db:

sqlite> ATTACH DATABASE 'DB1.db' AS 'db1' ; 

Информационный стол 'CARS' выглядит следующим образом:

sqlite> PRAGMA TABLE_INFO(CARS); 
0|ID|INT KEY|1||0 
1|COMPANY|CHAR(20)|1||0 
2|COLOR|CHAR(10)|1||0 

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

sqlite> CREATE TABLE RES1 AS SELECT ID,COMPANY FROM CARS WHERE ID='333'; 

И, как я ожидал, результат в новой таблице:

sqlite> SELECT * FROM RES1 ; 
333|Toyota 

Но новая информация таблица выглядит следующим образом:

sqlite> PRAGMA TABLE_INFO(RES1); 
0|ID|INT|0||0 
1|COMPANY|TEXT|0||0 

и как вы можете видеть, я не потерял «COMPANY» тип столбца - это уже не «CHAR (20)» и столбец может быть пустым («NOT NULL» равен 0, а не 1, как и раньше).

Мой вопрос: Как я могу сделать операции выше (приложите и запрос привести в новую таблицу) и до сих пор не теряют первоначальную информацию таблицы?

ответ

1

Это не имеет никакого отношения к ATTACHING.

CREATE TABLE ... AS ... не поддерживает определение таблицы; он создает таблицу с минимальным количеством информации о типе, чтобы иметь возможность хранить значения.

Если вы хотите иметь любое другое определение таблицы, вам необходимо создать таблицу вручную, а затем вставить данные с помощью INSERT INTO … SELECT ….

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

  • Нет связанных вопросов^_^