Страница 1 из 1

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

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

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

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

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

Добавлено: 28 авг 2006, 13:30
kdv
без перечисления столбцов не получится. не морочь себе голову.
p.s. оригинально ответы совпали :-)

Добавлено: 28 авг 2006, 13:36
Dimitry Sibiryakov
Это только заблуждаться можно разными способами.

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

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

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

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

Добавлено: 28 авг 2006, 14:25
Dimitry Sibiryakov
Вообще-то "снимок данных" делается транзакцией RR АКА concurency...

Добавлено: 28 авг 2006, 14:33
_Vetal_
Dimitry Sibiryakov
Подробнее плиз. Ссылки на инфу есть?

Добавлено: 28 авг 2006, 14:43
Dimitry Sibiryakov
http://www.ibase.ru/develop.htm, раздел "Транзакции, архитектура IB" и конкретно
http://www.ibase.ru/devinfo/ibtrans.htm