Название: Как получить ID строки при вставке данных (SQL) Отправлено: Jkc от Октябрь 25, 2006, 12:28 При вставке данных у меня в базе срабатывает автоинкримент и присваивается новый ID строке. Но мне нужно сразу получить этот ID для дальнейшего использования, желательно без нового запроса.
Код:
id_org поел с автоинкриментом, подскажите как мне его получить не делая повторного запроса. Название: Как получить ID строки при вставке данных (SQL) Отправлено: burunduk от Октябрь 25, 2006, 12:36 я делаю так:
QSqlQuery query = QSqlDatabase::database().exec(QString("selectcurrval('%1')").arg(seqname)); где seqname имя объекта SEQUENCE Название: Как получить ID строки при вставке данных (SQL) Отправлено: Jkc от Октябрь 25, 2006, 12:48 что то не выходит, можешь написать как в моём случае?
Название: Как получить ID строки при вставке данных (SQL) Отправлено: burunduk от Октябрь 25, 2006, 12:58 Это уже платформозависимый код. У меня postgreSQL.
Можно посмотреть документацию к своей СУБД как узнать последний номер в сиквенсе. Название: Как получить ID строки при вставке данных (SQL) Отправлено: BaltikS от Октябрь 25, 2006, 13:37 Цитата: "burunduk" я делаю так: QSqlQuery query = QSqlDatabase::database().exec(QString("selectcurrval('%1')").arg(seqname)); где seqname имя объекта SEQUENCE Честно говоря не думаю что это оптимально.....это равносильно SELECT MAX(id) FROM MYTABLE..... Также не вижу ничего кроссплатформенного......того, что бы могло по разному выполнять запрос! Название: Как получить ID строки при вставке данных (SQL) Отправлено: Вудруф от Октябрь 25, 2006, 13:57 1. Сначала выбирать из последовательности, затем полученное значение вставлять в таблицу. Это НЕ равносильно "select max(id)...", так как между вставкой и выборкой может произойти другая вставка. Равносильно это будет только в случае, если транзакция работает только с данными на момент её начала. В Oracle это по-умолчанию не так по причине неэффективности. Всключается через "set transaction read only;".
2. В случае Oracle имеется вариант "insert into <table_name> (...) values (...) returning ... into ..." Наверняка аналогичные варианты имеются и в других СУБД. Так что читай документацию. Название: Re: Как получить ID строки при вставке данных (SQL) Отправлено: Maxz от Октябрь 25, 2006, 15:21 Цитата: "Jkc" При вставке данных у меня в базе срабатывает автоинкримент и присваивается новый ID строке. Но мне нужно сразу получить этот ID для дальнейшего использования, желательно без нового запроса. id_org поел с автоинкриментом, подскажите как мне его получить не делая повторного запроса. Я в оракле делал примерно так: Код: FUNCTION FInsert() RETURN NUMBER IS ну, и соответственно nType - значение из сиквенса. В postgreSQL должно быть примерно также. Название: Как получить ID строки при вставке данных (SQL) Отправлено: Jkc от Октябрь 25, 2006, 16:09 В моём случае это MySQL
Название: Как получить ID строки при вставке данных (SQL) Отправлено: alexis от Октябрь 25, 2006, 19:48 QVariant QSqlQuery::lastInsertId () const
|