我目前插入新记录,然后使用(我希望足够)的字段运行选择查询,以保证只返回新插入的记录。我的数据库很少被多人同时访问(在查询之间发生其他插入的风险微乎其微),并且由于表的结构,通常很容易确定新记录。
现在我正在尝试更新一个没有太多唯一性空间的表,除了人工主键之外几乎没有唯一性。这意味着新记录可能不唯一,而我不想添加字段来强制唯一性。
在这种情况下,将记录插入Access表,然后从Excel查询新的主键的最佳方法是什么?
感谢回复。我已经尝试让@@IDENTITY起作用,但使用以下代码始终返回0。
Private Sub getIdentityTest()
Dim myRecordset As New ADODB.Recordset
Dim SQL As String, SQL2 As String
SQL = "INSERT INTO tblTasks (discipline,task,owner,unit,minutes) VALUES (""testDisc3-3"",""testTask"",""testOwner"",""testUnit"",1);"
SQL2 = "SELECT @@identity AS NewID FROM tblTasks;"
If databaseConnection Is Nothing Then
createDBConnection
End If
With databaseConnection
.Open dbConnectionString
.Execute (SQL)
.Close
End With
myRecordset.Open SQL2, dbConnectionString, adOpenStatic, adLockReadOnly
Debug.Print myRecordset.Fields("NewID")
myRecordset.Close
Set myRecordset = Nothing
End Sub
有什么需要负责的吗?
然而,鉴于Renaud(下面)提供的有用警告,使用@@IDENTITY
与使用任何其他方法几乎存在相同的风险,因此我现在采用SELECT MAX
。 但是,将来我会很有兴趣看看我上面的尝试有什么问题。
Max
可能会有些棘手...如果其他人正在插入记录,它可能会给你另一个记录的ID。如果只有你在插入记录,那就继续吧。 - user2421560