6 ответов:
вам придется подключить базу данных X с базой данных Y с помощью прикрепить команда, затем запустите соответствующую команду Insert Into для таблиц, которые вы хотите передать.
INSERT INTO X.TABLE SELECT * FROM Y.TABLE;или, если столбцы не совпадают по порядку:
INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;
Рассмотрим пример, где у меня есть две базы данных, а именно allmsa.дБ и Атланта.децибел. Скажем, база данных allmsa.БД имеет таблицы для всех msas в США и базы данных Атланта.БД пуста.
наша цель состоит в том, чтобы скопировать таблицу из Атланта allmsa.БД в Атланту.децибел.
шаги
- sqlite3 для Атланта.db (чтобы перейти в базу данных Атланты)
- прикрепить allmsa.децибел. Это можно сделать с помощью команды
ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;обратите внимание, что мы даем весь путь к базе данных для прикрепления.- проверить список баз данных с помощью
sqlite> .databasesвы можете увидеть вывод какseq name file --- --------------- ---------------------------------------------------------- 0 main /mnt/fastaccessDS/core/csv/atlanta.db 2 AM /mnt/fastaccessDS/core/csv/allmsa.db
- теперь вы подошли к своей реальной цели. Использовать команду
INSERT INTO atlanta SELECT * FROM AM.atlanta;это должно служить вашей цели.
самый простой и правильный способ в одну строку:
sqlite3 old.db ".dump mytable" | sqlite3 new.dbпервичный ключ и типы столбцов будут сохранены.
для одного действия времени, вы можете использовать .свалка и. читать.
дамп таблицы my_table из old_db.sqlite
c:\sqlite>sqlite3.exe old_db.sqlite sqlite> .output mytable_dump.sql sqlite> .dump my_table sqlite> .quitпрочитайте дамп в new_db.sqlite предполагая, что таблица там не существует
c:\sqlite>sqlite3.exe new_db.sqlite sqlite> .read mytable_dump.sqlтеперь вы клонировали свой стол. Чтобы сделать это для всей базы данных, просто оставьте имя таблицы в поле .команда dump.
бонус: базы данных могут иметь различные кодировки.
Objective-C код для копирования таблицы из базы данных в другую базу данных
-(void) createCopyDatabase{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); NSString *documentsDir = [paths objectAtIndex:0]; NSString *maindbPath = [documentsDir stringByAppendingPathComponent:@"User.sqlite"];; NSString *newdbPath = [documentsDir stringByAppendingPathComponent:@"User_copy.sqlite"]; NSFileManager *fileManager = [NSFileManager defaultManager]; char *error; if ([fileManager fileExistsAtPath:newdbPath]) { [fileManager removeItemAtPath:newdbPath error:nil]; } sqlite3 *database; //open database if (sqlite3_open([newdbPath UTF8String], &database)!=SQLITE_OK) { NSLog(@"Error to open database"); } NSString *attachQuery = [NSString stringWithFormat:@"ATTACH DATABASE \"%@\" AS aDB",maindbPath]; sqlite3_exec(database, [attachQuery UTF8String], NULL, NULL, &error); if (error) { NSLog(@"Error to Attach = %s",error); } //Query for copy Table NSString *sqlString = @"CREATE TABLE Info AS SELECT * FROM aDB.Info"; sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error); if (error) { NSLog(@"Error to copy database = %s",error); } //Query for copy Table with Where Clause sqlString = @"CREATE TABLE comments AS SELECT * FROM aDB.comments Where user_name = 'XYZ'"; sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error); if (error) { NSLog(@"Error to copy database = %s",error); } }
Мне нужно было переместить данные из базы данных SQL server compact в sqlite, поэтому с помощью sql server 2008 Вы можете щелкнуть правой кнопкой мыши по таблице и выбрать "Script Table To", а затем "Data to Inserts". Скопируйте инструкции insert удалите инструкции " GO "и они успешно выполняются при применении к базе данных sqlite с помощью приложения "DB Browser for Sqlite".
Comments