Есть ли метод last_insert_id для Sequel?

После вставки мне нужно узнать идентификатор строки, как я могу это сделать?


person xaver23    schedule 19.04.2010    source источник


Ответы (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