Дублирование записи, возможно ли?

Модераторы: kdv, CyberMax

Ответить
_Vetal_
Сообщения: 9
Зарегистрирован: 18 апр 2006, 18:01

Дублирование записи, возможно ли?

Сообщение _Vetal_ » 28 авг 2006, 13:18

Добрый день уважаемые.
Возникла необходимость в написании запроса, который дублировал бы запись в таблице но уже с другим ID, но вопрос стоит в том, можно ли ее сделать универсальной, без перечисления всех полей?
Есть например таблица Table1 с полями ID, Filed1, Field2. В ней есть запись 1, 'Field1', 'Field2'. Необходимо в этой же таблице получить 2, 'Field1', 'Field2'. Пытался сделать что-то вроде

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

INSERT INTO TABLE1 SELECT * FROM TABLE
только как сюда вставить новый ID? Кто-нибудь решал данную задачу?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 28 авг 2006, 13:29

Без перечисления - не получится. Ну разве что безусловный триггер...
Ты, кстати, поосторожнее со вставкой в ту же таблицу: в рекурсию свалишься и все - полный конец обеда.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 авг 2006, 13:30

без перечисления столбцов не получится. не морочь себе голову.
p.s. оригинально ответы совпали :-)

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 28 авг 2006, 13:36

Это только заблуждаться можно разными способами.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 28 авг 2006, 13:42

Нууу... Вообще-то ведущие проктологи могли бы и порекомендовать способ перенести свою одноразовую работу на сервак, так чтоб выполнял по каждому чиху, типа, что бы не делал, лишь бы затрахалсо... Но их кабинет, слава богу, по другому адресу расположен :wink:

_Vetal_
Сообщения: 9
Зарегистрирован: 18 апр 2006, 18:01

Сообщение _Vetal_ » 28 авг 2006, 13:55

Спасибо всем, обнадежили :)
Просто есть около десятка таблиц, в некоторых под 90 полей. Оч. не хотелось бы за всем этим постоянно следить, притом что есть тенденция появляться новым полям, я уже не говорю хотя бы раз их ручками перечислить :)
Думаю как вариант повесть триггер на INSERT который будет смотреть на наличие такого ID в таблице, и при необходимость присваивать новый, раз простым SQL не отделаться. Благо INSERT'ы десятками за раз не валятся и количество записей в таблицах небольшое(до 100 000).

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 28 авг 2006, 14:02

Что-то неладно в королевстве датском. Дублирование записи это нарушение нормальной формы. Зачем оно вам нужно? Может правильнее будет вытянуть запись на клиента, дать пользователю ее отредактировать и вставить как новую?..

_Vetal_
Сообщения: 9
Зарегистрирован: 18 апр 2006, 18:01

Сообщение _Vetal_ » 28 авг 2006, 14:09

Dimitry Sibiryakov
Да не мне это нужно, а тому кто ставит задачи.
Я уже давно забил на эти нарушения нормальной формы, только потому что так кому-то нужно, спорить в данном случае бесполезно.
Если в двух словах, это что-то типа снимка некоего состояния, в котором находился определенный набор данных в определенный момент времени. Далее те данные с которых был сделан снимок могут меняться...
Все действия происходят автоматически, без участия пользователя.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 28 авг 2006, 14:25

Вообще-то "снимок данных" делается транзакцией RR АКА concurency...

_Vetal_
Сообщения: 9
Зарегистрирован: 18 апр 2006, 18:01

Сообщение _Vetal_ » 28 авг 2006, 14:33

Dimitry Sibiryakov
Подробнее плиз. Ссылки на инфу есть?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 28 авг 2006, 14:43

http://www.ibase.ru/develop.htm, раздел "Транзакции, архитектура IB" и конкретно
http://www.ibase.ru/devinfo/ibtrans.htm

Ответить