После вставки мне нужно узнать идентификатор строки, как я могу это сделать?
Есть ли метод last_insert_id для Sequel?
Ответы (2)
Согласно документации по набору данных#insert, возвращаемое значение для insert()
обычно является первичным ключом вставляемой строки, но это зависит от того, какой адаптер вы используете.
person
Greg Campbell
schedule
20.04.2010
Я пробовал то же самое с SQL-сервером и уникальным идентификатором, но безуспешно. Уникальный идентификатор не возвращается.
Выдержка из моего определения:
CREATE TABLE [dbo].[MyTable](
[ID] [uniqueidentifier] NOT NULL,
[Data] [nvarchar](255) NULL
)
ALTER TABLE [dbo].[MyTable] ADD DEFAULT (newid()) FOR [ID]
Когда я вставляю с продолжением:
DB[:MyTable].insert( :Data => 'data' )
набор данных добавляется с уникальным идентификатором, но код возврата, если набор данных#вставить, равен nil
.
С участием
DB[:MyTable].insert(:ID => Sequel.function(:newid), :Data => 'data' )
вы получите тот же результат.
Я старался
key = Sequel.function(:ID)
DB[:MyTable].insert(:ID => key, :Data => 'data' )
но «ключ» - это только вызов функции, а не значение. С Sequel.function(:ID).f
вы получаете "Недопустимый идентификатор имени столбца"-ошибка
Но если вы используете модель, вы получите уникальный идентификатор:
class MyTable < Sequel::Model(:MyTable); end
entry = MyTable.create(:Data => 'data')
$uniqueidentifier = entry[:ID]
person
knut
schedule
20.09.2012