SCOPE_IDENTITY,@@ IDENTITY和IDENT_CURRENT返回null

时间:2019-04-16 19:19:40

标签: sql-server vb.net

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')")

我可以想象Open创造了一个新的范围,无法解释@@IDENTITY

UPDATE :这是下面建议的解决方案,我只是将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

2 个答案:

答案 0 :(得分:2)

您可以使用OUPTUT子句并执行insert + select作为单个操作:

INSERT INTO MLA(...)
OUTPUT inserted.identity_column_name
VALUES(...)

答案 1 :(得分:1)

您的“ dbs”连接可能具有一些连接池。

在同一SQL语句中编写SQL INSERT,然后选择SELECT身份。 最好的解决方案是创建一个存储过程,以插入数据,然后返回当前身份。