【发布时间】:2010-04-19 23:00:15
【问题描述】:
插入后,我需要知道行中的ID,我该怎么做?
【问题讨论】:
插入后,我需要知道行中的ID,我该怎么做?
【问题讨论】:
根据Dataset#insert documentation,insert() 的返回值通常是插入行的主键,但这取决于您使用的适配器。
【讨论】:
我对 SQL-Server 和唯一标识符进行了同样的尝试,但没有成功。不返回唯一标识符。
摘自我的定义:
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' )
数据集添加了唯一标识符,但如果 Dataset#insert 为 nil,则返回代码。
与
DB[:MyTable].insert(:ID => Sequel.function(:newid), :Data => 'data' )
你会得到同样的结果。
我试过了
key = Sequel.function(:ID)
DB[:MyTable].insert(:ID => key, :Data => 'data' )
但是'key'只是函数调用,而不是值。使用Sequel.function(:ID).f 你会得到一个“无效的列名ID'。”-错误
但如果你使用模型,你会得到唯一标识符:
class MyTable < Sequel::Model(:MyTable); end
entry = MyTable.create(:Data => 'data')
$uniqueidentifier = entry[:ID]
【讨论】: