Преобразование десятичной дроби в дробную

Я бы предпочел:

> sqlite3 <db_file>

sqlite3 > .output <output_file>
sqlite3 > .dump <table_name>

Строка выше генерирует дамп таблицы, который включает в себя инструкции DDL и DML.

Внесите изменения в этот файл, то есть найдите и замените имя таблицы с новым именем таблицы

Кроме того, замените "CREATE TRIGGER " на "CREATE TRIGGER <NEWTABLE>_", это заменит существующие триггеры именами триггеров с новым именем таблицы на нем. Это сделает его уникальным и не вызовет конфликтов с существующими триггерами. После того, как все изменения схемы реализованы, прочитайте его обратно в базу данных с помощью .read

sqlite3 > .read output_file

. Это можно записать в файл оболочки с помощью команд оболочки, таких как:

echo ".dump <table>" | sqlite3 <db_file> > <table_file>
sed -i.bak "s/\b<table_name>\b/<new_table_name>/g" <table_file>
sed -i.bak "s/\bCREATE TRIGGER \b/CREATE TRIGGER <new_table_name_>/g" <table_file>
echo ".read <table_file>" | sqlite3 <db_file>
rm <table_name>.bak 

Например :

Если у вас есть таблица T, а новая таблица TClone в файле db D с созданным файлом F: then

echo ".dump T" | sqlite3 D.sqlite > F
sed -i.bak "s/\bT\b/TClone/g" F
sed -i.bak "s/\bCREATE TRIGGER \b/CREATE TRIGGER TClone_>/g" F
echo ".read F" | sqlite3 D.sqlite 
rm T.bak

Наконец, вы можете обобщить этот скрипт, создав параметризованной версии, где вы можете передать исходную_таблицу, destination_table, db_file в качестве параметров, которые могут быть использованы для клонирования любой таблицы.

Я тестировал это, и он работает.

Тестирование:

sqlite3 <database_file>
sqlite3 > select * from <new_table>;

должен дать вам те же результаты, что и исходная таблица. и

sqlite3 > .schema <new_table>

должны иметь такую ​​же схему, что и исходная таблица с новым именем.

13
задан Joni 16 January 2013 в 11:26
поделиться