dbo,完全权限,本地SQL Server Express数据库,我创建并拥有的表。
我刚刚在MLA
中插入了一行,如果我做一个SELECT * FROM MLA
我会得到我刚刚插入的行......
19 2019-04-16 15:02:52.000 Test
"19"是键,它是一个标识列。所以我尝试用这些中的任何一个来获取那把钥匙......
SELECT SCOPE_IDENTITY()
SELECT IDENT_CURRENT('MLA')
SELECT @@IDENTITY
它们都返回 NULL。
该行是用以下代码行插入的:
DbS.Execute(SQL)
其中 DbS 是与服务器的活动、工作连接,也用于插入。然后,我尝试使用以下代码检索密钥:
Dim DT as RecordSet
DT = DbS.Open("SELECT IDENT_CURRENT('USAA_ArgusVal_MLA')")
我可以想象公开赛创造了一个新的范围,这并不能解释@@IDENTITY
更新:这是下面建议的解决方案,我只是将SELECT
添加到现有的 INSERT
SQL 语句中,并将.Execute
更改为使用此代码
SQL &= vbCrLf & "SELECT SCOPE_IDENTITY() AS MLAKey"
Dim DI As RecordSet = DbS.Open(SQL)
If DI.Read Then
MLAKey = DI!MLAKey
Else
MLAKey = ""
End If
OUPTUT
子句并执行插入+选择作为单个操作:
INSERT INTO MLA(...)
OUTPUT inserted.identity_column_name
VALUES(...)
<</div>
div class="one_answers"> 您的"dbs"连接可能有一些连接池。
编写 SQL INSERT,然后在同一 SQL 语句中选择标识。最佳解决方案是创建一个存储过程来插入数据,然后返回当前标识。