|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Таблица 1: id name 1 Иван Таблица 2: id name 0 Петр 0 Дмитрий Нужно добавить записи из таблицы 2 в таблицу 1 и при этом при добавлении каждой новой записи инкрементировать id. Может кто подскажет, как это сделать одним запросом? Пробовал сделать так: Код: sql 1. 2.
Получил: id name 1 Иван 2 Петр 2 Дмитрий а нужно: id name 1 Иван 2 Петр 3 Дмитрий ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 11:38 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Для этого есть автоинкремент. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 11:47 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Dima T, Это понятно, а если поле ID не с автоинкрементом? Есть ли способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 11:52 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Если скорость не принципиальна, то можно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Можно и покрасивее, но фокса под рукой нету, не могу проверить (возможно путаю), но типа такого: INSERT INTO tab1 (id, name) ; SELECT recno() +nMaxId, name FROM tab2 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 12:26 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Sergej_S, я в принципе так и делал (через scan). По поводу : Код: sql 1. 2.
попробовал - не работает, результат тот же что и у меня (Fox походу это выражение вычисляет один раз и подставляет его во все строки при вставке) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 12:36 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Упс, не сходу понял код, возможно ваш вариант и пройдет Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 12:38 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Сделай через курсор Код: sql 1. 2.
Сначала вставь name в курсор, они там прономеруются, затем с номерами вставляй в конечную таблицу. Только учти что если несколько пользователей будут одновременно это делать, то будут задвония ID. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 12:43 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Попутный вопрос про автоинкремент: Допустим у нас есть таблица Код: sql 1.
с автоинкрементным полем Код: sql 1.
Гарантирует ли следующий код, что функция Код: sql 1.
вернет именно то значение, которое было установлено для последней добавленной нами записи (даже если другой пользователь добавил новую запись в промежутке между выполнением команды 1 и 2): Код: sql 1. 2.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 12:50 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
У меня просто есть две таблицы: TABLE1 id_tab1 field1 1 Вася TABLE2 id_tab2 id_tab1 field2 1 1 Заказ1 2 1 Заказ2 Допустим поля id_tab1 и id_tab2 - автоинкрементные. Нужно сначала добавить запись в первую таблицу. А потом, например, еще 2 записи во вторую таблицу и при этом в качестве id_tab1 взять значение только что сгенерировнного id. Такой код будет корректным ?: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 13:00 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Вернет id Васи. Смотри хэлп GETAUTOINCVALUE() Возвращаемое функцией GETAUTOINCVALUE( ) последнее значение для автоинкрементного поля создается вне зависимости произошло ли реальное изменение данного поля в источнике данных. Возвращается значение =.NULL., если для заданной сессии данных еще не создано соответствующее значение автоинкрементного поля. Например, если еще не производилось никаких изменений источника данных (добавления записей), то возвращается значение =.NULL. Но эта функция вообще не нужна, т.к. Код: sql 1.
переместит указатель на добавленную строку, поэтому достаточно использовать table.id Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 13:04 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
faustgreenГарантирует ли следующий код, что функция Код: sql 1.
вернет именно то значение, которое было установлено для последней добавленной нами записи (даже если другой пользователь добавил новую запись в промежутке между выполнением команды 1 и 2): Код: sql 1. 2.
? Подозреваю, что вернет правильно, хотя я с автоинкрементом не работал. Почитай хелп фокса по getAutoIncremetnValue(), попробуй на практике из командного окна, открыв 2 фокса. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 13:09 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
В общем ушел тестировать, спасибо за советы! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2019, 13:17 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Лучше поздно, чем никогда. Это кстати самое главное преимущество фокса. .... Поле должно быть индексировано(лучше заранее). INDEX ON id TAG id Предварительно можно зафиксировать статус-кво по SET NEAR и SET ORDE m.NEAR_=SET("NEAR") m.ORDE_=SET("ORDE") Берем max. значение для поля(например для 5-ти значного 99999). Вкл.мягкий поиск SET NEAR ON Вкл. поиск по убыванию. SET ORDE TO id DESC SEEK 99999 Стали на запись с max-значением m.IDMAX=table.id Верните статус-кво SET NEAR &m.NEAR_ SET ORDE &m.ORDE_ Добавляйте(вставляйте) запись с table.id=m.IDMAX+1 И не надо циклов со SCAN/WHILE. Кстати, из опыта цикл по WHILE выполняется быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 12:07 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
Велосипедистам привет. Смотрите штатный пример в фоксе- Solution.pjx База данных newsid- показан простой способ генерации id в хранимой процедуре БД ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 13:25 |
|
SQL запрос (INSERT) c инкрементацией ID
|
|||
---|---|---|---|
#18+
БерезовскийВелосипедистам привет. Смотрите штатный пример в фоксе- Solution.pjx База данных newsid- показан простой способ генерации id в хранимой процедуре БД Привет, археолог. Это было актуально до появления полей с AUTOINC ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 13:53 |
|
|
start [/forum/topic.php?fid=41&fpage=8&tid=1581698]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 437ms |
0 / 0 |