Копирование таблицы SQLite

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

Привет всем !

Помогите пожалуйста начинающему программисту SQL !
Как сделать полную копию таблицы ? Вроде бы:

Код: Выделить всё

CREATE TABLE TableNew As Select * FROM TableOld;
Всё прекрасно получается ... но без индексов и как следствие добавление записей не работает.
Как добавить копирование PRIMARY KEY ? Или создание PRIMARY KEY(RecID) ... :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Копирование таблицы SQLite

Сообщение finsoftrz »

Игорь, эти вопросы проще погуглить. Например, по словам sqlite clone table.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

Гуглил есстестно ... :(
Там либо какой-то бред, либо заумные рассуждения о работе из командной строки.
Ну и бесконечный копипаст одного и того же. А CLONE - это вообще про БД, а не таблицу.
Думал, может у нас на форуме есть реально работающие с SQL ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

Копирование таблицы SQLite

Сообщение ingasoftplus »

I suspect you're missing the difference between CREATE TABLE and CREATE TABLE AS (otherwise known as CTAS).

CREATE TABLE AS allows you to create a table from the resultset of a query.

For example:

Код: Выделить всё

CREATE TABLE PHILSUCKS AS ( SELECT PHIL, SUCKS FROM EGGS );
You could, instead of using CTAS, use a "normal" CREATE TABLE statement, then INSERT the rows manually. This allows you to specify the PRIMARY KEY and any constraints. eg:

Код: Выделить всё

CREATE TABLE PHILSUCKS
(
  PHIL   INTEGER PRIMARY KEY,
  SUCKS  INTEGER NOT NULL
);

INSERT INTO PHILSUCKS ( SELECT PHIL, SUCKS FROM EGGS );
Obviously, you can also create indexes etc too:

Код: Выделить всё

CREATE INDEX EGGSUCKING ON PHILSUCKS (SUCKS);
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

ingasoftplus писал(а): 12 Март 2021, 12:33 use a "normal" CREATE TABLE statement, then INSERT the rows manually
I decided the question a long time ago. But this is a slow solution. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Копирование таблицы SQLite

Сообщение finsoftrz »

Игорь Столяров писал(а): 12 Март 2021, 11:51 Гуглил есстестно ... :(
Там либо какой-то бред, либо заумные рассуждения о работе из командной строки.
Ну и бесконечный копипаст одного и того же. А CLONE - это вообще про БД, а не таблицу.
Думал, может у нас на форуме есть реально работающие с SQL ...
Гуглы разные, я перед ответом на всякий случай проверил, народ обсуждал, надо только подальше почитать. Про реально работающих было бесподобно, спасибо. :facepalm:
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

Я только учусь работать с SQL и не знаю как сделать полноценную копию таблицы одной командой.
Интернет читал какой есть, но не нашёл реального решения.
Сделал по книжке через создание новой таблицы и тупо перелил записи. :(

Если Вы знаете SQL и понимаете смысл вопроса - помогите пожалуйста его решить. :)
Если нет - ну буду сам искать, читать дальше интернет и т.д.
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Копирование таблицы SQLite

Сообщение gopstop2007 »

Код: Выделить всё

sqlite> .output c:/sqlite/albums.sql
! указываем в какой файл сохранить

sqlite> .dump albums
!указываем какую таблицу, если не указывать, сохраняет всю базу

sqlite> .quit
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

Игорь Столяров писал(а): 12 Март 2021, 11:51 Там либо какой-то бред, либо заумные рассуждения о работе из командной строки.
Приятно цитировать самого себя. Хоть кто-то читает перед тем как написать. Но всё равно спасибо ! ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Копирование таблицы SQLite

Сообщение finsoftrz »

Я так понял, что штатно нельзя. Можно получить описание таблицы из метаданных, и по нему сгенерить описание новой таблицы. Но это надо пробовать, мне такое не нужно.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

Спасибо ... Я пришёл к такому же результату. :(
В SQL всё хорошо, пока ты идёшь по общей колее, но шаг в сторону и вырастают какие-то циклопические проблемы ! :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Копирование таблицы SQLite

Сообщение finsoftrz »

Тут обычно стандартный ответ, наверно Вы тащите подходы из проектов с isam. :)
C6/C11, ШВС, tps/btrieve.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Копирование таблицы SQLite

Сообщение gopstop2007 »

Код: Выделить всё

DATA
AA CSTRING(4096)
BB CSTRING(4096)
CODE

! получаем схему таблицы
sqldumy{PROP:SQL} = 'SELECT sql FROM sqlite_master WHERE type=`table` AND name=`mytable`'
Next(sqldumy)
AA = sqldumy.field

! получаем индексы -index
sqldumy{PROP:SQL} = 'SELECT sql FROM sqlite_master WHERE type=`index` AND tbl_name=`mytable`'
Next(sqldumy)
BB = sqldumy.field

! найти в строке AA 'mytable' заменить на  'mytable1', выполняем создание таблицы с новым названием
sql{PROP:SQL} = AA

! копируем данные
INSERT INTO mytable1 AS SELECT * FROM mytable

“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

Копирование таблицы SQLite

Сообщение PavelNK »

Игорь Столяров писал(а): 12 Март 2021, 15:07 Я только учусь работать с SQL и не знаю как сделать полноценную копию таблицы одной командой.
Интернет читал какой есть, но не нашёл реального решения.
Сделал по книжке через создание новой таблицы и тупо перелил записи. :(

Если Вы знаете SQL и понимаете смысл вопроса - помогите пожалуйста его решить. :)
Если нет - ну буду сам искать, читать дальше интернет и т.д.
Я не работаю с SQLLite, в основном работаю с MSSQL и подобными.
Если нужно получить абсолютную копию таблицы вместе со всеми индексами и т.д. и т.п., то нужно создать эту таблицу скриптом, а потом скопировать данные. Если описания нет, то можно получить его из системных таблиц, содержащих описание всех объектов БД.
Думаю, что в SQLLite аналогично.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Копирование таблицы SQLite

Сообщение Игорь Столяров »

Спасибо ! Как много нужно всего знать в каждом направлении, что бы делать софт ... Блин ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить